Classificando DataGridView

DataGridView colunas são, por padrão, a funcionalidade espécie registra automaticamente, basta clicar sobre o cabeçalho da coluna que contém os dados para o qual você deseja classificar os dados.

Cada coluna tem um SortMode datagridview propriedade que podemos definir em NoSortable, Automatic e programática. Se nunca alterar esta propriedade, estará em Automático.

A ordem funciona muito bem, a menos que você quiser classificar por uma coluna numérica. Os dados numéricos é classificado como texto para que a ordem não será correta. Em seguida, mostrar um exemplo para que você possa entender melhor.

Por exemplo, precisamos de uma forma e controle datagridview. Adicione três colunas nomeadas Nome, Grupo e Pontuação. Você deve ver algo parecido com a seguinte imagem:

OrdenandoDatagridview001

Em seguida, adicione este código no Load do formulário para adicionar alguns registros:

 Private Sub Form1_Load (sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load DataGridView1.Rows.Add (New String () {"Eliseu", "usuário", 24321}) DataGridView1.Rows.Add ( New String () {"Carlos", "suporte", 122}) DataGridView1.Rows.Add (New String () {"Jose", "Usuário", 423}) DataGridView1.Rows.Add (New String () {" Sebastian "," Supervisor ", 1023}) DataGridView1.Rows.Add (New String () {" Javier "," Usuário ", 111}) DataGridView1.Rows.Add (New String () {" Sue "," Usuário " , 1}) DataGridView1.Rows.Add (New String () {"Veronica", "Supervisor", 24}) DataGridView1.Rows.Add (New String () {"Gabriela", "User", 65}) DataGridView1. Rows.Add (New String () {"Agostinho", "Usuário", 719}) DataGridView1.Rows.Add (New String () {"Camila", "Supervisor", 4322}) DataGridView1.Rows.Add (Nova Cadeia () {"Melisa", "Usuário", 654}) DataGridView1.Rows.Add (New String () {"Liliana", "suporte", 22}) End Sub 

Agora, para entender melhor como eles devem executar o programa e teste ordenado pelas três colunas. Aqui vou mostrar-lhe como quando solicitado pela coluna de pontuação:

OrdenandoDatagridview002

Bem, a imagem é muito clara: 1, 1023, 111, 122, 22 ... não é a ordem correta. Para resolver este problema, devemos alterar a ordem da coluna para classificação automática programático.

OrdenandoDatagridview003

Bem, este é apenas o primeiro passo agora precisamos adicionar ao nosso formulário de uma nova classe que irá agendar a ordem para colunas numéricas, a classe é a seguinte:

  Public Class OrdenarColumnaNumerica
     Implementa System.Collections.IComparer

     SortOrderModifier privado As Integer = 1
     Col privado As Integer = 0

     Public Sub New (ByVal sortOrder Como SortOrder, coluna ByVal As Integer)
         Col = Coluna
         Se sortOrder = sortOrder.Descending seguida
             = -1 sortOrderModifier
         Então ElseIf sortOrder = sortOrder.Ascending
             sortOrderModifier = 1
         End If
     End Sub

     Função Pública Compare (ByVal x As Object, ByVal y As Object) As Integer _
         Implementa System.Collections.IComparer.Compare

         DataGridViewRow1 Dim DataGridViewRow = CType (x, DataGridViewRow)
         DataGridViewRow2 Dim DataGridViewRow = CType (y, DataGridViewRow)

         Retorno (Math.Sign (CLng (DataGridViewRow1.Cells (Col) Value) -.. CLng (DataGridViewRow2.Cells (Col) Value))) * sortOrderModifier
     End Function
 End Class 

Uma vez que temos a nossa classe para lidar com ordem coluna numérica, chamamos isso de caso ColumnHeaderMouseClick datagridview da seguinte forma:

  DataGridView1_ColumnHeaderMouseClick Private Sub (sender As Object, ByVal e System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick

         Encomende estática As Integer = 1

         Se DataGridView1.Rows.Count> 0 Then
             Se DataGridView1.Columns (e.ColumnIndex). Name = "pontuação" Então
                 Se Order = 1 Then
                     DataGridView1.Sort (Nova OrdenarColumnaNumerica (SortOrder.Ascending, e.ColumnIndex))
                     Ordem = 0
                 Outro
                     DataGridView1.Sort (Nova OrdenarColumnaNumerica (SortOrder.Descending, e.ColumnIndex))
                     Ordem = 1
                 End If
             End If
         End If
     End Sub 

Pronto! Agora você só precisa executar e testar o programa. Agora, o resultado será parecido na próxima imagem corretamente ordenou:

OrdenandoDatagridview004

Espero que você possa dar um bom uso a esta técnica.

9 Responses to "Classificando DataGridView"

  1. Informações Bitacoras.com ...

    Taxa de Bitacoras.com: DataGridView Colunas são, por padrão, a funcionalidade espécie registra automaticamente, basta clicar sobre o cabeçalho da coluna que contém os dados para o qual você deseja classificar o ......

    • jose diz:

      Olá e feito todo o exercício como este e eu recebo um erro na coluna de pontuação e teve que colocá-lo citações "e também não mandou, por favor, você pode me ajudar ... muchas grasias

  2. Omar diz:

    Oi, eu encontrei este post muito interessante, eu me pergunto como eles poderiam fazer se a coluna tem datas, o problema é que, ao preencher a grade com uma consulta sql, convertido para varchar para só me mostrar a data, sem o tempo e não encontrar uma maneira de-os através da grade

  3. natalia diz:

    Eu preciso pedir um datagrid que é carregado com um conjunto de dados de uma consulta sobre uma tabela no SQL. CDO eu clicar no nome da coluna, a ordem.

  4. Nerio Espina diz:

    Muito obrigado, eu era de pouca ajuda. Eu precisava para classificar o controle DataGridView sem que o usuário tinha que clicar e com a sua ajuda eu consegui o que eu queria.

  5. Alvaro diz:

    Uma pergunta, como ordenados por data? Obrigado.

  6. Joel diz:

    bom amigo, me ajudou muito este ...

  7. BGTT diz:

    Olá! Eu tenho uma pergunta semelhante e não consigo resolver. alguém pode me ajudar? se assim que eu enviar para o seu e-mail as perguntas mais detalhadas que podem ajudar. Obrigado. este é o meu mail: nelson_nn_0800@hotmail.com apreciar a me ajudar!

  8. rod diz:

    Recebo esta mensagem de erro se DataGridView1.Columns (e.ColumnIndex). Name = "pontuação" Então

Comentar