将datagridview行移动到另一个datagridView
对于这类问题,我已经完成了其他答案,到目前为止还没有真正奏效。
我有一个foreach
循环,它应该将源datagridview
的行添加到目标datagridview
然后从源中删除该行。
无效的操作exception是: Row provided already belongs to a DataGridView control.
我无法得到...Rows.Copy()
也可以。 有任何想法吗?
foreach (DataGridViewRow selRow in fromDataGridView.SelectedRows) { toDataGridView.Rows.Add(selRow); fromDataGridView.Rows.Remove(selRow); }
在将其添加到toDataGridView
之前,需要从fromDataGridView
删除该行。
但是你正在修改foreach
循环中的集合 – 这是行不通的。
解决方法是复制集合以在foreach
使用。
试试这个:
foreach (DataGridViewRow selRow in fromDataGridView.SelectedRows.OfType().ToArray()) { fromDataGridView.Rows.Remove(selRow); toDataGridView.Rows.Add(selRow); }
以下是您可以做或尝试的示例..
当一行被删除时,它会发生行计数递减,所以如果你把你的代码放在for循环中并反向运行它会工作正常看看:
for (int selRow = dataGridView1.Rows.Count -1; selRow >= 0 ; selRow--) { toDataGridView.Rows.Add(selRow); fromDataGridView.Rows.Remove(selRow); }
当存在BindingSource
时,无法直接向DataGridView
添加新行。
您应该将行添加到第二个视图的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]); }