【问题标题】:DataGridViewColumn initial sort directionDataGridViewColumn 初始排序方向
【发布时间】:2009-07-28 12:59:40
【问题描述】:

我正在使用 VS2008 开发 C# WinForms 应用程序。默认情况下,当单击 DataGridView 中的列标题时,它会按升序对该列进行排序,然后您可以再次单击列标题对其进行降序排序。

我正在尝试扭转这种情况,因此第一次点击按降序排序,然后第二次点击按升序排序,我无法弄清楚如何做到这一点。有人知道吗?

谢谢

【问题讨论】:

    标签: c# winforms datagridview sortdirection


    【解决方案1】:

    您可以将 HeaderCell SortGlyphDirection 设置为 Ascending,然后下一次单击将为您提供降序。默认为无。

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

    【讨论】:

    • 我相信这只会改变“字形”而不是排序顺序 - 即列标题上显示的图像:▲ 或 ▼
    • 啊,你是对的,你也必须对列进行排序,我在上面更新了
    • 我猜一旦你排序,你不需要设置 SortGlyphDirection
    • 这适用于单个特定列,但我试图让所有列在第一次单击时按降序排序。
    • 您可以在 dataGridView.Columns 上执行一个 foreach 循环并将它们全部排序。不是最有效的方法,但应该可以。
    【解决方案2】:
    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】:

    我建议下面的代码

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2015-08-18
        • 2012-02-15
        • 2011-03-15
        • 1970-01-01
        • 1970-01-01
        • 2013-02-08
        • 2023-03-24
        • 2011-06-19
        • 1970-01-01
        相关资源
        最近更新 更多