在c#中的datagridview中交换行

时间:2011-04-15 11:39:55

标签: c# rows


我有一个与dataTable无关的datagridview 我想交换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;
}

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

6 个答案:

答案 0 :(得分:9)

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);

答案 1 :(得分:4)

HI,
你试过了吗?

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

答案 2 :(得分: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方法保存两行,删除行,然后重新插入它们。

如果有人知道更好的方法(因为这就像iteslf的6行方法而没有找到其他值的逻辑),请做评论!

答案 3 :(得分:2)

尝试:

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

答案 4 :(得分:1)

同样是补充:

如果你需要更频繁地交换,把你最喜欢的方法放在它自己的类中并调用方法(例如Interchange())

答案 5 :(得分: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);
  }
}