none
Ordenar Columna de Datagridview RRS feed

  • Pregunta

  • Pregunta hay alguna forma deOrdenar Columna de Datagridview que no sea alfabéticamente

    A que me refiero tengo campo enero,febrero,marzo,abril,mayo  etc. Si presiono para que me los ordene, me los ordena alfabéticamente y me queda desordenado según el orden de los meses del año. Lo que quiero hacer que al presionar un botón o al ingresar al formulario se me ordenen pero como corresponde, en orden de los meses del año y no alfabéticamente

    Si alguien me puede ayudar pliss

    Saludos

    • Cambiado Enrique M. Montejo martes, 4 de septiembre de 2012 17:05 Controles de Windows Forms (De:Lenguaje VB.NET)
    miércoles, 8 de agosto de 2012 22:21

Todas las respuestas

  • Hola noesmalo seria recomendable que cada pregunta que hicieres, le agregues una imagen con tu problema, para asi darle mas peso y facilitarte la solucion
    Avatar de noesmalo

    n


    Christian Ramirez Castillo (PERU) Soporte Tecnico - Programador

    miércoles, 8 de agosto de 2012 22:28
  • miércoles, 8 de agosto de 2012 22:32
  • Hola Amigo:

    La mejor manera seria que colocaras una columna oculta con el numero del mes que representa cada Mes descrito en letra y despues ordenar esta de esta manera:

    DataGridView1.Sort(DataGridView1.Columns("Nombre_de_la_columna"),System.ComponentModel.ListSortDirection.Ascending)

    De esta manera ordenas la columna con el numero del mes. y solucionas tu problema...

    Desconosco si existe una forma directa de hacerlo y si la hay creo que aprendere contigo :D


    Saludos desde Monterrey, N.L. México

    Luis Escobar :D


    miércoles, 8 de agosto de 2012 23:32
  • El método Sort del DataGridView1 es invocado cuando se pica sobre la columna 0 (En el método Compare, la celda se identifica como 0, la puedes cambiar obviamente). El orden implementado aquí es sólo ascendente. Se asume una ortografía standard (e.g., septiembre con p).

    'Class1.vb
    Imports System.Collections
    
    Public Class ComparaMeses
        Implements IComparer
    
        Dim meses As String() = {"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"}
    
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
            Implements IComparer.Compare
    
            Dim res As Integer = 0
    
            Dim rx As DataGridViewRow = CType(x, DataGridViewRow)
            Dim ry As DataGridViewRow = CType(y, DataGridViewRow)
    
            If meses.Contains(rx.Cells(0).Value.ToString.ToLower) And meses.Contains(ry.Cells(0).Value.ToString.ToLower) Then
                res = Array.IndexOf(meses, rx.Cells(0).Value.ToString.ToLower) - Array.IndexOf(meses, ry.Cells(0).Value.ToString.ToLower)
            End If
    
            '
            Return res
        End Function
    End Class
    
    'Form1.vb
    Public Class Form1
        Private Sub DataGridView1_ColumnHeaderMouseClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick
            DataGridView1.Sort(New ComparaMeses)
        End Sub
    End Class
    

    jueves, 9 de agosto de 2012 0:21
  • Walteres tu solucion es la mas acertada a mi necesidad ,pero tira error en

     

    If mes.Contains(rx.Cells(0).Value.ToString.ToLower) And mes.Contains(ry.Cells(0).Value.ToString.ToLower) Then

                res = Array.IndexOf(mes, rx.Cells(0).Value.ToString.ToLower) - Array.IndexOf(mes, ry.Cells(0).Value.ToString.ToLower)

            End If

     

    Error        'Contains' no es un miembro de 'System.Array'.

    A y muchas gracias a todos por ayudar


    • Editado noesmalo jueves, 9 de agosto de 2012 13:45 Data
    jueves, 9 de agosto de 2012 13:38