quinta-feira, 24 de abril de 2008

Ordenar DataGridView

No Post anterior “Ordenar Listview” mostrei como fazer um Sort personalizado no Listview agora irei mostrar como fazer o Sort no DataGridView, pois bem o DataGridView diferente do Listview possui um evento de nome DataGridView_SortCompare o que vai facilitar muito a nossa vida pois a única coisa que teremos de fazer é comparar os valores para retornar a ordem.

Crie um novo projeto no Visual Studio e altere seu nome para OrdenarDataGridView.



Acesse o código do Form1 e insira o código abaixo:

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'CRIA DUAS COLUNAS NO DataGridView
DataGridView1.Columns.Add("NOME", "NOME")
DataGridView1.Columns.Add("DTNASC", "DTNASC")
'INSERI ALGUNS ITEM NO DataGridView ALTERANDO O VALOR DAS DATAS
For X As Int16 = 101 To 200
DataGridView1.Rows.Add("DANIEL" & X, _
DateTime.Now.AddDays(X + 150))
Next X
End Sub

Private Sub DataGridView1_SortCompare(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewSortCompareEventArgs) _
Handles DataGridView1.SortCompare
Dim DataValida As DateTime
'VERIFICA SE COLUNA É DO TIPO DATA PARA FAZER A COMPARAÇÃO
'CASO A COLUNA NÃO SEJA UMA DATA VALIDA COMPARA STRING
If DateTime.TryParse(e.CellValue1, DataValida) = False Then
e.SortResult = System.String.Compare(e.CellValue2, e.CellValue1)
Else
If DateTime.TryParse(e.CellValue1, DataValida) = False Then
e.SortResult = -1
Else
e.SortResult = System.DateTime.Compare(CType(e.CellValue2, _
Date), CType(e.CellValue1, Date))
End If
End If
e.Handled = True
End Sub
End Class

Para baixar este projeto completo em Visual Studio 2008 clique no link abaixo:

Ordenar DataGridView


Pronto com base neste código você pode fazer a comparação de acordo com a sua necessidade.

Um comentário:

gabriel disse...

Obrigado pelo código, muito útil.