【问题标题】:How to Sort DataGridView?如何对 DataGridView 进行排序?
【发布时间】:2013-11-20 20:25:23
【问题描述】:

我想按如下方式对我的 datagridview 进行排序

当我清除任何行时,datagridview 是这样的

生成的datagridview应该是这样的

我尝试了一点,但它不起作用

    foreach (DataGridViewRow rw in dataGridView1.Rows.Cast<DataGridViewRow>())
    {
            for (int i = 0; i < rw.Cells.Count; i++)
            {
                rw.Cells[i].Value = rw.Cells[i + 1].Value;
            }
    }

【问题讨论】:

  • 这不是对 gridview 进行排序,它会完全改变你的 gridview。
  • 是的,只有我想要这样
  • 你确定吗?您不需要单列数据?
  • 列这么多,你怎么知道需要排序多久?
  • @SriramSakthivel,任何时候都只有 12 列和 8 行。

标签: c# winforms sorting datagridview rows


【解决方案1】:

以这种方式更新网格可能会导致性能不佳,尤其是当您有数千行和数十列时。这段代码对你有用,但你的需求确实很奇怪,在大多数专业项目中可能不会遇到:

//First we need to get all the non-empty cell values in some List<string>
var cells = dataGridView1.Rows.Cast<DataGridViewRow>()
              .Where(row=>!row.IsNewRow)
              .SelectMany(row=>dataGridView1.Columns.Cast<DataGridViewColumn>()
                               .Select(col=>row.Cells[col]))
              .OrderBy(cell=>cell.ColumnIndex)
              .ThenBy(cell=>cell.RowIndex)
              .Where(cell=>Convert.ToString(cell.Value)!="").ToList();
//update the cells to make the grid look like sorted
for(int i = 0; i < dataGridView1.ColumnCount; i++){
  for(int j = 0; j < 8; j++){
    if(dataGridView1.Rows[j].IsNewRow) continue;
    int k = i*8+j;
    dataGridView1[i,j].Value = k < cells.Count ? cells[k] : null;
  }
}

【讨论】:

  • 通过使用这个我的datagridview没有正确更新名称将是这样的“DataGridViewTextBoxCell { ColumnIndex = 0,RowIndex = 0 }”第一行,“DataGridViewTextBoxCell { ColumnIndex = 0,RowIndex = 2 } " 像这样它正在更新
  • 上面的我清除了,但它只占用了 7 行而不是 8 行。
  • 行数是固定的,只有8行。
  • @Anjali 看到更新的代码,你确实在做一些非常奇怪的事情。我从来没有做过这样的事情,也永远不会做。
猜你喜欢
  • 2012-02-12
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多