我已经通过其他答案解决了这类问题,到目前为止还没有真正奏效。
我有一个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);
}
答案 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]);
}