将datagridview行移动到另一个datagridView

时间:2012-02-13 17:37:37

标签: c# datagridview move

我已经通过其他答案解决了这类问题,到目前为止还没有真正奏效。

我有一个foreach循环,应该将源datagridview中的行添加到目标datagridview,然后从源中删除该行。

无效的操作例外是:Row provided already belongs to a DataGridView control.

我也无法让...Rows.Copy()工作。有什么想法吗?

foreach (DataGridViewRow selRow in fromDataGridView.SelectedRows)
{
    toDataGridView.Rows.Add(selRow);
    fromDataGridView.Rows.Remove(selRow);
}

3 个答案:

答案 0 :(得分:4)

在将fromDataGridView添加到toDataGridView之前,您需要将其删除。

但是你正在修改foreach循环中的集合 - 这将无效。

解决方法是复制集合以在foreach中使用。

试试这个:

foreach (DataGridViewRow selRow in fromDataGridView.SelectedRows.OfType<DataGridViewRow>().ToArray())
{
    fromDataGridView.Rows.Remove(selRow);
    toDataGridView.Rows.Add(selRow);
}

答案 1 :(得分:1)

以下是您可以做或尝试的示例..

当一行被删除时,它会发生行计数减少,所以如果你把你的代码放在for循环中并反向运行它可以正常工作看看:

for (int selRow = dataGridView1.Rows.Count -1; selRow >= 0 ; selRow--)
{
   toDataGridView.Rows.Add(selRow);
   fromDataGridView.Rows.Remove(selRow);     
}

答案 2 :(得分:0)

DataGridView时无法直接向BindingSource添加新行。

您应该将行添加到第二个视图的BindingSource,并让它将行添加到其网格中。

我已在一个可行的解决方案中测试了以下代码。

var selectedRows = dataGridView1.SelectedRows;
int count = dataGridView1.SelectedRows.Count;
for (int i = 0; i < count; i++)
{
    bindingSource2.Add(bindingSource1[selectedRows[i].Index]);
    dataGridView1.Rows.Remove(selectedRows[i]);
}