代码之家  ›  专栏  ›  技术社区  ›  lnediger

DataGridViewColumn初始排序方向

  •  6
  • lnediger  · 技术社区  · 15 年前

    我在VS2008中的一个C WinForms应用程序上工作。默认情况下,当单击DataGridView中的列标题时,该列将升序排序,然后可以再次单击列标题以降序排序。

    我正试图逆转这个过程,所以最初的点击排序是降序的,然后第二次点击排序是升序的,我还没弄清楚怎么做。有人知道吗?

    谢谢

    4 回复  |  直到 8 年前
        1
  •  9
  •   SwDevMan81    15 年前

    可以将HeaderCell SortGlyphDirection设置为Ascending,然后单击下一步将给出降序。默认值为“无”。

    dataGridView1.Sort(Column1, ListSortDirection.Ascending);
    this.Column1.HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
    
        2
  •  7
  •   Christopher Galpin    14 年前
    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;
        }
    }
    
        3
  •  1
  •   sam    8 年前

    我建议下面的代码

    MyDGV.Sort(MyDGV.Columns[column_Index], ListSortDirection.Ascending);
    
        4
  •  0
  •   Vivek    15 年前

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