2009-07-28 12 views
6

Estoy trabajando en VS2008 en una aplicación C# WinForms. De forma predeterminada, al hacer clic en un encabezado de columna en un DataGridView, ordena esa columna Ascendente, luego puede hacer clic en el encabezado de la columna nuevamente para ordenarla Descendiendo.Dirección de clasificación inicial de DataGridViewColumn

Estoy tratando de revertir esto, por lo que el clic inicial ordena Descendente, luego el segundo clic ordena Ascendente y no he podido averiguar cómo hacerlo. ¿Alguien sabe?

Gracias

Respuesta

7

Puede configurar el HeaderCell SortGlyphDirection a ascendente, y luego el siguiente clic va a dar la orden descendente. El valor predeterminado es ninguno.

dataGridView1.Sort(Column1, ListSortDirection.Ascending); 
this.Column1.HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending; 
+0

Creo que esto sólo cambiará el 'glifo' no el orden de clasificación - es decir, la imagen que aparece en la columna encabezado: ▲ o ▼ – Vivek

+0

Ah, tienes razón, también tienes que ordenar la columna, actualicé arriba – SwDevMan81

+0

Y creo que o Antes de ordenar, no es necesario configurar SortGlyphDirection – SwDevMan81

0

Echa un vistazo a DataGridView.SortCompare. Ver versión ligeramente modificada del ejemplo de MSDN a continuación:

private void dataGridView1_SortCompare(object sender, 
     DataGridViewSortCompareEventArgs e) 
    { 
     // Try to sort based on the cells in the current column. 
     e.SortResult = System.String.Compare(
      e.CellValue2.ToString(), e.CellValue1.ToString()); // descending sort 

     e.Handled = true; 
    } 
7
foreach (DataGridViewColumn column in DataGridView1.Columns) 
{ 
    column.SortMode = DataGridViewColumnSortMode.Programmatic; 
} 

y

private void DataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    var column = DataGridView1.Columns[e.ColumnIndex]; 
    if (column.SortMode != DataGridViewColumnSortMode.Programmatic) 
     return; 

    var sortGlyph = column.HeaderCell.SortGlyphDirection; 
    switch (sortGlyph) 
    { 
     case SortOrder.None: 
     case SortOrder.Ascending: 
      DataGridView1.Sort(column, ListSortDirection.Descending); 
      column.HeaderCell.SortGlyphDirection = SortOrder.Descending; 
      break; 
     case SortOrder.Descending: 
      DataGridView1.Sort(column, ListSortDirection.Ascending); 
      column.HeaderCell.SortGlyphDirection = SortOrder.Ascending; 
      break; 
    } 
} 
+0

Gracias. Esto es mucho mejor que la respuesta "aceptada". – XKCD137

1

que sugieren a continuación código

MyDGV.Sort(MyDGV.Columns[column_Index], ListSortDirection.Ascending); 
Cuestiones relacionadas