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 :

  1. Preencher uma ListBox com dados de um banco de dados Access usando um DataReader
  2. Selecionar um registro da ListBox e exibir os dados correspondentes em controles TextBox.
  3. Atualizar os dados selecionados nas caixas de texto

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