C# 如何对DataGridView进行排序?

C# 如何对DataGridView进行排序?,c#,winforms,sorting,datagridview,rows,C#,Winforms,Sorting,Datagridview,Rows,我想对datagridview进行如下排序 当我清除任何一行时,datagridview如下所示 结果datagridview应该是这样的 我试了一点,但不起作用 foreach (DataGridViewRow rw in dataGridView1.Rows.Cast<DataGridViewRow>()) { for (int i = 0; i < rw.Cells.Count; i++) {

我想对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;
            }
    }
foreach(dataGridView1.Rows.Cast()中的DataGridViewRow rw)
{
对于(int i=0;i
以这种方式更新网格可能会导致性能低下,尤其是当您有数千行和几十列时。此代码适用于您,但您的需求确实有些奇怪,在大多数专业项目中可能不会遇到:

//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;
  }
}
//首先,我们需要获取一些列表中的所有非空单元格值
var cells=dataGridView1.Rows.Cast()
.Where(row=>!row.IsNewRow)
.SelectMany(行=>dataGridView1.Columns.Cast()
.Select(列=>row.Cells[col]))
.OrderBy(单元格=>cell.ColumnIndex)
.ThenBy(cell=>cell.RowIndex)
.Where(cell=>Convert.ToString(cell.Value)!=“”)。ToList();
//更新单元格,使网格看起来像已排序的网格
for(int i=0;i
这不是对gridview进行排序,它完全改变了你的gridview。是的,就像那样,只有我想你确定吗?您不需要单列中的数据?有这么多列,您如何知道需要排序多长时间?@SriramSakthivel,任何时候都只有12列8行。使用此选项,我的datagridview没有正确更新,第一行的名称将类似于“DataGridViewTextBoxCell{ColumnIndex=0,RowIndex=0}”,DataGridViewTextBoxCell{ColumnIndex=0,RowIndex=2}“像这样,它正在更新我清除的上面一行,但它只占用7行而不是8行。行数是固定的,它只有8行。@Anjali看到更新的代码,你确实在做一些非常奇怪的事情。我从来没有做过这样的事情,也永远不会做。