ASP .NET - Exibindo a seleção de um dropdownlist em um DataGrid


Esta é uma tarefa básica e rotineira : exibir a seleção feita por um usuário usando um componente dropdownlist em um DataGrid.

Geralmente você preenche um dropdownlist com as opções disponíveis para o usuário. Estes dados podem vir de um tabela de um array de um arquivo texto,etc. Ao selecionar uma opção é montada uma instrução SQL com o dado selecionado e um comando SQL é executado contra outra tabela para selecionar os dados e exibir em um DataGrid.

Neste exemplo deste artigo eu vou usar o banco de dados Northwind.mdb do Access e fazer alguns ajustes nas tabelas categorias e produtos.

O objetivo será apresentar no componente dropdownlist as categorias disponíveis e exibir no datagrid os produtos relacionados com a categoria selecionada.

Abaixo temos as estruturas das duas tabelas:

 
tabela Categorias   Tabela Produtos

Perceba que o campo Categoria é comum as duas tabelas. As tabelas originais não possuem esta estrutura , fiz o ajuste para fins didáticos e por que assim fica mais simples.

Agora vamos abrir o Web Matrix e informar os dados conforme a figura abaixo. (Você pode alterar a localização e o nome do arquivo a seu bel prazer.)

Na guia Design do Web Matrix insira os componentes : dropdownlist , button , label e datagrid conforme figura abaixo:

Na guia HTML o código que define os componentes já deverá estar criado , faça os ajustes conforme abaixo:

<html>
<head>
</head>
<body>
<h3><font face="Verdana">Exbindo seleção de um dropdownlist em um DataGrid</font>
</h3>
<form id="form" runat="server">
<asp:DropDownList id="categoria" runat="server" datatextfield="Categoria"></asp:DropDownList>
<asp:Button id="button" onclick="doQuery" runat="server" Text="Selecione uma categoria: "></asp:Button>
</form>
<asp:Panel id="Panel1" runat="server" visible="False" Width="693px" Height="174px">
<hr />
<div align="center"><b><i>Resultado : </i></b>
<asp:Label id="label1" runat="server"></asp:Label>
<br />
<asp:Label id="label2" runat="server"></asp:Label>
<p>
<ASP:DataGrid id="MyDataGrid" runat="server" EnableViewState="False" HeaderStyle-BackColor="#aaaadd" Font-Size="8pt"       Font-Name="Verdana" CellPadding="3" BorderColor="Black" BackColor="#CCCCFF" Width="631px" Visible="False" Font-Names="Verdana">
   <HeaderStyle backcolor="#AAAADD"></HeaderStyle>
</ASP:DataGrid>
</p>
</div>
</asp:Panel>
</body>
</html>

Na guia Code temos o código de script usando VB.NET para acessar as tabelas e preencher o dropdownlist e montar e executar a instrução SQL.

Sub Page_Load(Sender As Object, E As EventArgs)

if not Page.IsPostBack then
    PreencheLista()
end if
End Sub

'executa a consulta SQL e exibe os dados no datagrid
Sub ExecutaConsultaSQL(Source as Object, E as EventArgs)
Dim DS As DataSet
Dim MyConnection As OleDbConnection
Dim MyCommand As OleDbDataAdapter
Dim strCategoria as string
strCategoria=categoria.SelectedItem.Text
Label1.Text="Você escolheu : " + strCategoria

Dim MySQL as string
MySQL="select * from Produtos where Categoria='" & strCategoria & "'"
panel1.visible="true"
label2.text=MySQL

Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("data\NWind.mdb") & ";"

MyConnection = New OleDbConnection(strconn)


MyCommand = New OleDbDataAdapter(MySQL, MyConnection)
DS = new DataSet()
MyCommand.Fill(ds, "Produtos")

MyDataGrid.DataSource=ds.Tables("Produtos").DefaultView
MyDataGrid.DataBind()

End Sub

'
preenche o dropdownlist com os dados da tabela categorias
Sub PreencheLista()

Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("data\NWind.mdb")

Dim Conn as new OleDbConnection(strConn)

Dim strSQL as string ="select distinct categoria from categorias"
Dim Cmd as New OleDbCommand(strSQL,Conn)
Conn.Open()
categoria.DataSource = Cmd.ExecuteReader()
categoria.DataBind()
End Sub

O código completo é dado abaixo:

<%@ Page Debug="False" Trace="False" Language="vb" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

Sub Page_Load(Sender As Object, E As EventArgs)

if not Page.IsPostBack then
   PreencheLista()
end if
End Sub

Sub ExecutaConsultaSQL(Source as Object, E as EventArgs)
Dim DS As DataSet
Dim MyConnection As OleDbConnection
Dim MyCommand As OleDbDataAdapter
Dim strCategoria as string
strCategoria=categoria.SelectedItem.Text
Label1.Text="Você escolheu : " + strCategoria

Dim MySQL as string
MySQL="select * from Produtos where Categoria='" & strCategoria & "'"
panel1.visible="true"
label2.text=MySQL

Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("data\NWind.mdb") & ";"

MyConnection = New OleDbConnection(strconn)


MyCommand = New OleDbDataAdapter(MySQL, MyConnection)
DS = new DataSet()
MyCommand.Fill(ds, "Produtos")

MyDataGrid.DataSource=ds.Tables("Produtos").DefaultView
MyDataGrid.DataBind()


End Sub

Sub PreencheLista()

Dim strConn as string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("data\NWind.mdb")

Dim Conn as new OleDbConnection(strConn)

Dim strSQL as string ="select distinct categoria from categorias"
Dim Cmd as New OleDbCommand(strSQL,Conn)
Conn.Open()
categoria.DataSource = Cmd.ExecuteReader()
categoria.DataBind()
End Sub

</script>
<html>
<head>
</head>
<body>
<h3><font face="Verdana">Exbindo seleção de um dropdownlist em um DataGrid</font>
</h3>
<form id="form" runat="server">
<asp:DropDownList id="categoria" runat="server" datatextfield="Categoria"></asp:DropDownList>
<asp:Button id="button" onclick="ExecutaConsultaSQL" runat="server" Text="Selecione uma categoria: "></asp:Button>
</form>
<asp:Panel id="Panel1" runat="server" visible="False" Width="693px" Height="174px">
<hr />
<div align="center"><b><i>Resultado : </i></b><asp:Label id="label1" runat="server"></asp:Label>
<br />
<asp:Label id="label2" runat="server"></asp:Label>
<p>
<ASP:DataGrid id="MyDataGrid" runat="server" EnableViewState="False" HeaderStyle-BackColor="#aaaadd" Font-Size="8pt" Font-Name="Verdana" CellPadding="3" BorderColor="Black" BackColor="#CCCCFF" Width="631px" Visible="False" Font-Names="Verdana">
<HeaderStyle backcolor="#AAAADD"></HeaderStyle>
</ASP:DataGrid>
</p>
</div>
</asp:Panel>
</body>
</html>

Ao executar o arquivo buscaData.aspx no servidor Web Matrix iremos obter o seguinte resultado...

Eu sei , é apenas ASP .NET , mas eu gosto...


José Carlos Macoratti