Desenvolvimento - ASP. NET

ASP.NET - DataGrid com ordenação

Estamos de volta mais uma vez falando do componente DataGrid, creio que um dos componentes mais utilizados no ASP.NET. Dessa vez vamos tornar uma coluna do mesmo ordenável.

por Ramon Durães



Estamos de volta mais uma vez falando do componente DataGrid, creio que um dos componentes mais utilizados no ASP.NET. Dessa vez vamos tornar uma coluna do mesmo ordenável. Sendo que quando o usuário clicar na coluna o DataGrid vai disparar no servidor o evento ShortCommand, nesse evento ele passa um parâmetro que é o e.SortExpression, com esse parâmetro você obtém o valor da coluna que foi clicada, com isso basta modificar a consulta SQL e pronto já ordenou os dados.


Figura 01 - DataGrid ordenando pela coluna

Para esse artigo insira um novo webform e um DataGrid(ID=dgConsulta). Depois adicione o código da Listagem 01.

Listagem 01 - Código para ordenar DataGrid

Public Class DataGrid_Sorting

    Inherits System.Web.UI.Page 

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.dgConsulta.AllowSorting = True  "Tornando coluna  Ordenavel
        If Not Me.Page.IsPostBack Then
            Me.CarregarGrid("")
        End If
End Sub

Private Sub dgConsulta_SortCommand(ByVal source As Object, ByVal e As 
System.Web.UI.WebControls.DataGridSortCommandEventArgs) Handles dgConsulta.SortCommand

        Me.CarregarGrid(e.SortExpression)

End Sub

Private Sub CarregarGrid(ByVal strFiltro As String)

        If Not strFiltro.Equals("") Then
            strFiltro = " order by " + strFiltro + " asc"
        End If 

        Dim conn As New System.Data.sqlclient.SqlConnection("Data Source=127.0.0.1; Initial 
Catalog=Northwind;UID=sa;Pwd=123456")

        Dim da As New System.Data.sqlclient.SqlDataAdapter
        Dim cmd As New System.Data.SqlClient.SqlCommand
        cmd.Connection = conn
        cmd.CommandText = "select CustomerID,ContactName,Phone from Customers " + strFiltro
        da.SelectCommand = cmd
        Dim dt As New System.Data.DataTable
        Try
            da.Fill(dt)
            With dgConsulta
                .DataSource = dt
                .DataBind()
            End With

        Catch ex As System.Data.SqlClient.SqlException
            Response.Write("Erro SQL" + ex.Message.ToString)
        Catch ex As Exception
            Response.Write("Erro Geral:" + ex.Message.ToString)
        Finally

            dt.Dispose()
            da.Dispose()
          conn.Dispose()

       End Try

End Sub
End Class 

Finalizando

DataGrid é um componente muito bom, revolucionou a forma de apresentar dados na tela. Teremos sempre novos artigos sobre esse WebControl. A partir de agora ative a ordenação dos seus!

Para obter o fonte clique aqui.

"Use .NET não é mais necessário reinventar a roda..."

O que você gostaria saber?
Aguardo seu comentário! Ele é muito importante. Participe!!! Até próximo artigo!

Você é de Salvador Bahia, então participe do grupo de usuários .NET http://www.mutex.com.br

Ramon Durães

Ramon Durães - Especialista em desenvolvimento de software e Microsoft Most Valuable Professional (MVP) em Visual Studio Team System. Realiza treinamentos de .NET Framework em empresas, consultoria em arquitetura de software e implantação de Visual Studio Team System. Palestrante nos principais eventos da Microsoft no Brasil (Tech-Ed 2005, Tech-Ed 2006, Tech-Ed 2007, Tech-Ed 2008, Tech-ED 2009), Microsoft Innovation Days 2007 (Salvador, Brasília, Recife, Goiânia, Natal, Maringá), Microsoft Innovation Days 2009 (Salvador) , Campus Party Brasil 2009 e eventos regionais relacionados a grupos de usuários e universidades. Conhecido autor de artigos para os principais portais de conteúdo e autor de 10 publicações eletrônicas em CD (Video-Aula) pela editora Linha de Código além dos livros "Desenvolvendo para web usando o Visual Studio 2008" e "Gerenciando projetos de software usando Visual Studio Team System" pela editora Brasport. Pode ser encontrado em seu blog http://www.ramonduraes.net e @ramonduraes no Twitter.