【问题标题】:How to Custom Datagridview Sort Like this如何像这样自定义 Datagridview 排序
【发布时间】:2016-05-14 00:14:52
【问题描述】:

我有一个带有列值的 Windows Datagridview

id
---
0
0
0
5
2
7

我想要这种升序,但零包含单元格将在下面。 像这样-

2
5
7
0
0
0

【问题讨论】:

  • dgv的数据源是什么?
  • 没有数据源。手动添加行。 grid1.rows.add(row);

标签: c# asp.net windows winforms


【解决方案1】:

如果您的网格没有使用数据源,那么您可以像这样使用DataGridView.SortCompare 事件

void yourDataGridView_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
    if (e.Column.Name == "Id" && e.CellValue1 != null && e.CellValue2 != null)
    {
        var x = (int)e.CellValue1;
        var y = (int)e.CellValue2;
        e.SortResult = x == y ? 0 : x == 0 ? 1 : y == 0 ? -1 : x.CompareTo(y);
        e.Handled = true;
    }
}

不要忘记将事件处理程序附加到您的网格视图。

【讨论】:

    【解决方案2】:

    由于您没有提到DataGridView 的数据源,我展示了一种使用集合的方法。例如int[],但它适用于所有:

    int[] collection = { 0, 0, 0, 5, 2, 7 };
    int[] ordered = collection.OrderBy(i => i == 0).ThenBy(i => i).ToArray();
    

    这是有效的,因为第一个 OrderBy 使用的比较可以是 truefalse。由于truefalse“高”,所有不为0 的都先出现。 ThenBy 用于非零组的内部排序。

    如果这太抽象了,也许你会觉得这更易读:

    int[] ordered = collection.OrderBy(i => i != 0 ? 0 : 1).ThenBy(i => i).ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-12
      • 2010-09-30
      • 2010-11-25
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      相关资源
      最近更新 更多