在C#中交换DataGridView中的行

7


我有一个DataGridView,它与DataTable无关。
我想在DataGridView中交换第1行和第10行,例如。
我使用以下代码进行操作:

int row_1 = 1;
int row_10 = 10;
for(int i=0;i<grid.ColumnCount;i++)
{
  string temp = grid.Rows[row_1].Cells[i].Value.ToString();
  grid.Rows[row_1].Cells[i].Value = grid.Rows[row_10].Cells[i].Value.ToString();
  grid.Rows[row_10].Cells[i].Value = temp;
}

但我想知道有没有简单的方法来做到这一点?

这不太好,你不需要调用 Value.ToString() 等方法,只需将 Value 存储在一个对象中即可。这将是通用的,不像你的代码只适用于字符串。 - Zoli
6个回答

10
var r10 = grid.Rows[9];
var r1 = grid.Rows[0];
grid.Rows.Remove(r1);
grid.Rows.Remove(r10);
grid.Rows.Insert(0, r10);
grid.Rows.Insert(9, r1);

4

你好,
你尝试过吗:

DataGridViewRow temp =grid.Rows[row_1];
grid.Rows[row_1] = grid.Rows[row_10];
grid.Rows[row_10] = temp;

我收到了这个消息:DataGridViewRowCollection.this[int] 无法被分配——它是只读的。 - Georg

4
我希望评论一下这个问题。虽然在以前的C#版本中可能可以直接进行交换,就像smoore/Gabriels所说的那样-
DataGridViewRow temp = grid.Rows[row_1].Clone();
grid.Rows[row_1] = grid.Rows[row_10].Clone();
grid.Rows[row_10] = temp;

由于grid.Rows[index]现在是只读的,因此不再支持这种操作。

取而代之的是,使用DarkSquirrels的方法来保存两行数据,删除它们,然后重新插入已交换的数据。

如果有更好的方法(因为这个方法本身就需要6行代码,并且没有找到其他值的逻辑),请务必留言!


2

尝试:

DataGridViewRow temp = grid.Rows[row_1].Clone();
grid.Rows[row_1] = grid.Rows[row_10].Clone();
grid.Rows[row_10] = temp;

1

补充一点:

如果你需要更频繁地进行交换操作,可以将你最喜欢的方法放在自己的类中,并调用该方法(例如Interchange())。


0

这个方法很好用:

private static void SwapRows(DataGridView grid, int row1, int row2)
{
  if (row1 != row2 && row1 >= 0 && row2 >= 0 && row1 < grid.RowCount && row2 < grid.RowCount)  
  {
    var rows = grid.Rows.Cast<DataGridViewRow>().ToArray();
    var temp = rows[row1];
    rows[row1] = rows[row2];
    rows[row2] = temp;
    grid.Rows.Clear();
    grid.Rows.AddRange(rows);
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接