ASP.NET - Ordenação dinâmica


Como podemos efetuar uma ordenação dinâmica exibindo os resultados em um DataGrid ?

Para mostrar como fazer isto vou criar um banco de dados chamado Empresa.mdb e uma tabela chamada Funcionarios copiando os dados da tabela Employees do banco de dados Northwind.mdb.

Abaixo temos a estrutura e os dados da tabela funcionarios:

A estrutura da tabela funcionarios Os dados da tabela

Vou usar o Web Matrix como editor de código e vou usar também o servidor do Web Matrix para testar o código.

Abra então o Web Matrix e crie uma nova página ASP.NET com o nome de ordenaGrid.aspx ; na guia Design inclua os seguintes componentes conforme figura abaixo:

Na guia HTML temos o código HTML para os controles que foi gerado automaticamente.

<html>
<head>
<title>Ordenação no DataGrid</title>
</head>
<body>
<img height="32" src="maco10.gif" width="233" border="0" /><font face="Verdana"><strong>-
Ordenação dinâmica no DataGrid</strong></font>
<hr />
<form id="form1" runat="server">
<table>
<tbody>
<tr>
<td valign="top" align="left">
<b><font face="Verdana" size="2"></font></b></td>
<td valign="top" align="right">
<p align="left">
Ordenar por:
<asp:dropdownlist id="ddl" runat="server">
<asp:listitem value="Nome">Nome</asp:listitem>
<asp:listitem value="Sobrenome">Sobrenome</asp:listitem>
<asp:listitem value="Cidade">Cidade</asp:listitem>
<asp:listitem value="Pais">Pais</asp:listitem>
<asp:listitem value="Nascimento">Nascimento</asp:listitem>
</asp:dropdownlist>
Opção:
<asp:dropdownlist id="ddlDir" runat="server">
<asp:listitem value="asc">Ascendente</asp:listitem>
<asp:listitem value="desc">Descendente</asp:listitem>
</asp:dropdownlist>
</p>
</td>
</tr>
<tr>
<td valign="top" align="left" colspan="2">
<p align="center">
<asp:Datagrid id="dgFuncionarios" runat="server" AlternatingItemStyle-Font-Size="10" AlternatingItemStyle-Font-Name="Arial" AlternatingItemStyle-BackColor="#EFEFEF" Font-Size="Smaller" Font-Name="Arial" Headerstyle-Font-Size="12" Headerstyle-Font-Bold="True" Headerstyle-Font-Name="Arial" Headerstyle-BackColor="#8080C0" Font-Names="Verdana" Height="137px" Width="516px">
<AlternatingItemStyle font-size="10pt" font-names="Arial" backcolor="#EFEFEF"></AlternatingItemStyle>
<HeaderStyle font-size="12pt" font-names="Arial" font-bold="True" backcolor="#FFFFC0"></HeaderStyle>
</asp:Datagrid>
<br />
<asp:Button id="btn1" onclick="VinculaDados" runat="server" Text="Exibir Resultado"></asp:Button>
</p>
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

Na guia Code insira o código abaixo que irá efetuar a ordenação conforme a opção do usuário.

Dim ordernaPor as String
Dim opcao as String
Dim strSQL as String

Sub VinculaDados(Source as Object, E as EventArgs)

ordernaPor=ddl.selectedItem.text
opcao=ddlDir.selectedItem.value

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

if ordernaPor="" and opcao="" then
    strSQL = "Select Nome, Sobrenome, Cidade, Pais, Nascimento from Funcionarios"
else
    strSQL = "Select Nome, Sobrenome, Cidade, Pais, Nascimento from Funcionarios order by " & ordernaPor & " " & opcao
end if

Dim conexao as New OleDbConnection(strConn)
Dim ds as DataSet=New DataSet()
Dim Cmd as New OleDbDataAdapter(strSQL,conexao)

Cmd.Fill(ds,"Funcionarios")
dgFuncionarios.Datasource=ds.Tables("Funcionarios").DefaultView
dgFuncionarios.DataBind()

End Sub

No código acima temos os seguintes passos:

1 - As variáveis ordenaPor e opcao recebem os valores selecionados nas caixas dropdownlist

2- Definimos a string de conexão OleDb com a base de dados Empresa.mdb

3- Definimos o valor da string strSQL que é montada conforme o valor das variáveis ordenaPor e opcao.

4- Realizamos a conexão com a base de dados

5- criamos o DataSet e definimos o DataAdapter

6 - preenchemos o DataSet com os valores obtidos e exibimos no DataGrid

Na figura abaixo temos o resultado obtido no servidor do Web Matrix.

Veja o exemplo funcionando em : http://www.visualbasic.mat.br/aspnet/ordenaGrid.aspx

Pegue o código completo aqui : odenaGrid.aspx

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


José Carlos Macoratti