2009-07-28 76 views
6

我正在VS2008中的C#WinForms应用程序中工作。默认情况下,当点击DataGridView中的列标题时,会按升序对该列进行排序,然后您可以再次单击列标题以对其进行降序排序。DataGridViewColumn初始排序方向

我想扭转这种情况,所以最初的点击排序降序然后第二次点击排序升序,我一直无法弄清楚如何做到这一点。有人知道吗?

谢谢

回答

7

您可以设置HeaderCell SortGlyphDirection为升序,再下点击会给你的降​​序排列。默认值是none。

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

我相信这只会改变“字形”不排序顺序 - 即在列中显示的图像标题:▲或▼ – Vivek 2009-07-28 13:36:36

+0

嗯,你是对的,你必须对列进行排序,我更新 – SwDevMan81 2009-07-28 14:04:10

0

看看DataGridView.SortCompare。 请参见下面的MSDN例子稍作修改的版本:

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; 
} 

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; 
    } 
} 
1

我建议下面的代码

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