在C#中交换datagridview中的行

问题描述

| 我有一个与dataTable不相关的datagridview。 我想交换例如datagridview中的第一行和第十行。 我为此使用此代码
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;
}
但我想知道有没有简单的方法可以做到这一点?     

解决方法

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);
    ,嗨, 你有没有尝试过:
DataGridViewRow temp =grid.Rows[row_1];
grid.Rows[row_1] = grid.Rows[row_10];
grid.Rows[row_10] = temp;
    ,我想对此发表评论。 尽管以前可以使用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方法保存两行,删除这些行,然后重新插入它们。 如果有人知道更好的方法(因为这就像iteslf的6行方法,而没有找到其他值的逻辑),请发表评论!     ,尝试:
DataGridViewRow temp = grid.Rows[row_1].Clone();
grid.Rows[row_1] = grid.Rows[row_10].Clone();
grid.Rows[row_10] = temp;
    ,就像另外: 如果您需要更频繁地进行交换,请将方法放在您最喜欢的方法之上,放在自己的类中,然后调用该方法(例如Interchange())     ,此方法可以正常工作:
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);
  }
}