ASP.NET - Editando dados em uma ListBox
É muito fácil desenvolver para web com ASP .NET . Você pode usar o Visual Studio NET ou o Web Matrix , uma ferramenta grátis que você pega em www.asp.net . Vou mostrar como fazer a edição de dados de uma ListBox. As tarefas que vamos realizar serão :
Antes de começar veja a aplicação funcionando em : http://www.visualbasic.mat.br/aspnet/ListBox.aspx
Abaixo temos a figura da tela da aplicação em execução rodando no servidor Web Matrix na porta 8091:
Eu vou usar o Web Matrix para criar o layout da aplicação. Então vamos abrir o Web Matrix e informe o nome e caminho da aplicação conforme a figura abaixo. (Todo o nosso código estará em um único arquivo chamado : ListBox.aspx.)
A interface da aplicação irá ser composta dos seguintes componentes e os respectivos nomes (propriedade ID) utilizados:
A seguir temos o código HTML onde definimos os controles e os eventos que irão invocar as rotinas correspondentes:
button1 : evento : onclick - dispara a rotina -
EditaRegistro
label id = lblID : exibe o valor da variável - intID - que
representa o código do cliente
label id = frmNome : exibe o valor da variável - strNome - que
representa o nome do cliente
label id = frmEmail : exibe o valor da variável - strEmail - que
representa o email do cliente
button2 : evento : onclick - dispara a rotina - Atualiza
<html> <head> <title>Selecionando e atualizando registros</title> </head> <body> <form name="form1" runat="server"> <table style="Z-INDEX: 101; WIDTH: 559px; POSITION: absolute; HEIGHT: 207px" width="559" border="0"> <tbody> <tr> <td valign="top" align="middle" width="145"> <b><i>Relação de Clientes</i></b> <br /> <asp:ListBox id="list1" runat="server" Width="250px" height="150px"></asp:ListBox> <br /> <asp:button id="button1" onclick="EditaRegistro" runat="server" Width="221px" Text="Selecione cliente para alterar"></asp:button> </td> <td valign="top" align="left"> <p> <b>Código : </b> <asp:Label id="lblID" runat="server" Text="<%# intID %>"></asp:Label> <br /> <b>Nome : </b> <asp:textbox id="frmNome" runat="server" Width="202px" Text="<%# strNome %>"></asp:textbox> <br /> <b>Email : </b> <asp:textbox id="frmEmail" style="Z-INDEX: 100; POSITION: absolute; Design_Time_Lock: true" runat="server" Width="203px" Text="<%# strEmail %>" Design_Time_Lock="true"></asp:textbox> <br /> <br /> <br /> <asp:button id="button2" onclick="Atualiza" runat="server" Width="233px" Text="Atualiza dados do Cliente"></asp:button> </p> <p> <b> <asp:Label id="label1" runat="server" forecolor="red" Font-Bold="True"></asp:Label> </b> <br /> </td> </tr> </tbody> </table> </form> </body> </html> |
Código do script que realiza todo o processamento dos dados é o seguinte:
<%@ Page
Language="VB" Debug="true" %> <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.OleDb" %> <script runat="server"> Dim intWdth, intID as integer Dim strNome, strEmail, strTitle as string Sub Page_Load(Source as Object, E as EventArgs) if not Page.IsPostBack then BindData End If End Sub Sub BindData() Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Teste.mdb" Dim sql as string = "Select Codigo, Nome, Email from Clientes" Dim conn as New OleDbConnection(strConn) Dim Cmd as New OleDbCommand(sql, conn) Dim objDR as OleDbDataReader conn.Open() objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection) list1.datasource=objDR list1.DataValueField="Codigo" list1.datatextfield="Nome" list1.databind list1.selectedindex=0 conn.Close() End Sub Sub EditaRegistro(Source as Object, E as EventArgs) Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Teste.mdb" Dim sql as string = "Select Codigo, Nome, Email from Clientes Where Codigo= " & list1.selecteditem.value Dim conn as New OleDbConnection(strConn) Dim objDR as OleDbDataReader Dim Cmd as New OleDbCommand(sql, conn) conn.Open() objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection) While objDR.Read() intID=objDR("Codigo") strNome=objDR("Nome") strEmail=objDR("Email") End While databind() label1.text="" label2.text="" conn.Close End Sub Sub Atualiza(Source as Object, E as EventArgs) Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\teste.mdb" Dim MySQL as string = "Update Clientes Set Nome=@nome, Email=@Email Where Codigo=@Codigo" Dim Conn as New OleDbConnection(strConn) Dim Cmd as New OleDbCommand(MySQL, Conn) cmd.Parameters.Add(New OleDbParameter("@Nome", frmNome.text)) cmd.Parameters.Add(New OleDbParameter("@Email", frmEmail.text)) cmd.Parameters.Add(New OleDbParameter("@Codigo", lblID.text)) Conn.Open() cmd.ExecuteNonQuery label2.text="Atualização realizada com sucesso... " list1.SelectedIndex=List1.Items.IndexOf(List1.Items.FindByValue(lblID.text)) conn.Close BindData End Sub |
Estou acessando o banco de dados teste.mdb e sua tabela clientes . Vejamos o que faz cada uma das rotinas do script:
1- BindData() - Acessa e tabela clientes e exibe os dados no ListBox. Estamos exibindo o nome do cliente (Nome) e ao selecionar um cliente o seu código e informado como valor para o campo.
list1.datasource=objDR
list1.DataValueField="Codigo"
list1.datatextfield="Nome"
list1.databind
list1.selectedindex=0
2- EditaRegistro() - Conforme a seleção é feita no ListBox - filtramos os dados da tabela usando o código do cliente - e exibimos nas caixas de texto.
"Select Codigo, Nome, Email from
Clientes Where Codigo= " &
list1.selecteditem.value
3- Atualiza() - Atualiza os dados conforme as alterações feitas no TextBox:
Dim MySQL as string = "Update Clientes Set Nome=@nome, Email=@Email Where Codigo=@Codigo"
Nada complicado , não é mesmo !!! ...
José Carlos Macoratti