Desenvolvimento - ASP. NET

Sorting no ASP.NET: Organizando as idéias - Parte I

Neste artigo mostrarei como utilizar os recursos de Sorting dentro do ASP.NET. Do mais simples ao mais complexo.

por Cristian Arrano Townsend



Neste artigo mostrarei como utilizar os recursos de Sorting dentro do ASP.NET. Do mais simples ao mais complexo.

Vale lembrar que os recursos de Sorting que vem com o ASP.NET sao validos somente para o controle Datagrid. Como os controles DataList e Repeater trabalham com Templates, a maneira de fazer o sorting é na base da customizaçao, ou no portugues, "descendo a lenha no teclado".

Todos os exemplos utilizarão o banco de dados Northwind do MS SQL 2000.

Simple Sorting

Para este nosso exemplo utilizarei um Web Form que conecta e mostra os dados de uma tabela. A figura abaixo mostra como é o nosso DataGrid (id=dGrid).

O código HTML é mostrado abaixo.

<form id="Form1" method="post" runat="server">
	<asp:DataGrid id="dGrid" runat="server"></asp:DataGrid>
<P>
	<asp:Label id="lblMsg" runat="server">Label</asp:Label></P>
	<P></P>
</form>

Código da Classe

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
  Handles MyBase.Load
    If Not Page.IsPostBack Then
        BindData()
    End If
End Sub

Sub BindData()
    Dim cnn As New SqlConnection("server=localhost;database=northwind;trusted_connection=true")
    Dim cmm As New SqlCommand("select * from customers", cnn)
    Try
        cnn.Open()
        Dim dr As SqlDataReader = cmm.ExecuteReader
        Me.dGrid.DataSource = dr
        Me.dGrid.DataBind()
    Catch ex As Exception
        Me.lblMsg.Text = ex.Message.ToString
    Finally
        If cnn.State = ConnectionState.Open Then
            cnn.Close()
        End If
    End Try
End Sub

Simples. O código acima vai gerar uma página como a figura abaixo:

Utilizando a propriedade Allowsorting

O DataGrid contém uma propriedade chamada AllowSorting. A maneira mais fácil de permitir Sorting em um DataGrid é configurando a propriedade AllowSorting para True e criar um evento SortCommand para o DataGrid. Tudo isso com a propriedade do DataGrid AutoGenerateColumns=False.

Somente o fato de configurar a propriedade AllowSorting para True provoca a seguinte mudança, como é mostrado na figura abaixo:

O nome de cada coluna se transforma em um HyperLink, mas ainda falta um pouco. Ou melhor, falta o escencial: o código.

O código do evento SortCommand é mostrado abaixo:

Sub SortDataGrid(ByVal sender As Object, ByVal e As DataGridSortCommandEventArgs)
	BindData(e.SortExpression)
End Sub

O código do DataGrid também sofreu algumas mudanças, como mostra o código abaixo:

<asp:DataGrid OnSortCommand="SortDataGrid" AllowSorting="True" id="dGrid" runat="server">
</asp:DataGrid>

O sub BindData foi modificado para que aceitasse o parâmetro de sorting, como mostra o código a continuação:

Sub BindData(Optional ByVal strOrder As String = "")
    Dim cnn As New SqlConnection("server=localhost;database=northwind;trusted_connection=true")
    Dim strSql As String = "select * from customers"
    If strOrder <> "" Then
        strSql += " order by " & strOrder
    End If
    Dim cmm As New SqlCommand(strSql, cnn)
    Try
        cnn.Open()
        Dim dr As SqlDataReader = cmm.ExecuteReader
        Me.dGrid.DataSource = dr
        Me.dGrid.DataBind()
    Catch ex As Exception
        Me.lblMsg.Text = ex.Message.ToString
    Finally
        If cnn.State = ConnectionState.Open Then
            cnn.Close()
        End If
    End Try
End Sub

Dificultando um pouco

No exemplo anterior, nós utilizamos um DataGrid com a propriedade AutoGenerateColumns como True. Isso quer dizer que o nome de cada coluna foi gerado automaticamente pelo controle. É um fantástico recurso, porém a probabilidade de uso é bem baixa, pra não dizer que é quase zero. Sempre vamos querer algo personalizado. Para isso, temos que configurar tal propriedade para False.

No nosso exemplo utilizando a propriedade AtuoGenerateColumns para False, vamos utilizar BoundColumns para customizar as nossas colunas.

Quando ambas propriedades (AutoGenerateColumns e AllowSorting) estão como True, a propriedade SortExpression de cada coluna do DataGrid e automaticamente "configurada" para o nome do campo que a coluna representa.

O código abaixo mostra como criar um Web Form utilizando os recursos de Sorting com a propriedade AutoGenerateColumns como False

<asp:DataGrid AllowSorting=True OnSortCommand="SortDataGrid" id="dGrid" 
		runat="server" AutoGenerateColumns="False">
	<Columns>
	<asp:BoundColumn DataField="ContactName" SortExpression="ContactName" 
		HeaderText="Nome"></asp:BoundColumn>
	<asp:BoundColumn DataField="City" HeaderText="City" 
		SortExpression="City"></asp:BoundColumn>
	<asp:BoundColumn DataField="country" SortExpression="Country" HeaderText="Country" 
		DataFormatString="{0:c}"></asp:BoundColumn>
	</Columns>
</asp:DataGrid>

O primeiro que podemos perceber é que a propriedade AutoGenerateColumns está como False. O que tambem podemos perceber é que cada BoundColumn tem uma propriedade chamada SortExpression, que define o campo pelo qual os registros serão filtrados.

Na segunda parte veremos como fazer o sort de maneira ascendente e descendente.

Cristian Arrano Townsend

Cristian Arrano Townsend - Trabalha há 12 anos com desenvolvimento de software. Atualmente trabalha como consultor da FCAMARA em Curitiba, trabalhando com .NET, Metodologias Ágeis e Sharepoint. Possui algumas certificações Microsoft .NET e é Certified Scrum Master