C# 将datagridview行移动到另一个datagridview

C# 将datagridview行移动到另一个datagridview,c#,datagridview,move,C#,Datagridview,Move,我已经看过了这类问题的其他答案,到目前为止,没有任何一个答案是有效的 我有一个foreach循环,它应该将源datagridview中的行添加到目标datagridview中,然后从源中删除该行 无效操作异常为:提供的行已属于DataGridView控件。 我也无法让…Rows.Copy()工作。有什么想法吗 foreach (DataGridViewRow selRow in fromDataGridView.SelectedRows) { toDataGridView.Rows.Ad

我已经看过了这类问题的其他答案,到目前为止,没有任何一个答案是有效的

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

无效操作异常为:
提供的行已属于DataGridView控件。

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

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

在将该行添加到
toDataGridView
之前,需要从DataGridView的
中删除该行

但是您在
foreach
循环中修改集合-这不起作用

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

试试这个:

foreach (DataGridViewRow selRow in fromDataGridView.SelectedRows.OfType<DataGridViewRow>().ToArray())
{
    fromDataGridView.Rows.Remove(selRow);
    toDataGridView.Rows.Add(selRow);
}
foreach(datagridview.SelectedRows.OfType().ToArray()中的DataGridViewRow selRow)
{
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]);
}
var selectedRows=dataGridView1.selectedRows;
int count=dataGridView1.SelectedRows.count;
for(int i=0;i
您需要在for循环而不是foreach循环中执行此操作,如果有意义,您需要按相反的顺序进行计数。
错误1'System.Windows.Forms.DataGridViewSelectedRowCollection'不包含'ToArray'的定义,并且没有接受第一个类型参数的扩展方法'ToArray'可以找到“System.Windows.Forms.DataGridViewSelectedRowCollection”(是否缺少using指令或程序集引用?
我确实使用System.Collections添加了
已更新,您需要一个
使用System.Linq
@RoyGoode:我有这样的错误:
当控件是数据绑定时,无法以编程方式将行添加到DataGridView的行集合。
在行中
toDataGridView.Rows.Add(selRow)@VănLộc听起来像是将DataGridView的数据绑定到了一个对象,比如DataSet、DataTable、List或Dictionary。执行此操作时,必须通过操纵BindingSource中指定的源对象来控制DataGridView中的行。这在
添加
行中失败。“要创建的副本数必须严格为正。”参数为count。这是因为selRow必须大于0。我如何设置/引用/更改两个DataGridView的绑定源?@ikathegreat我无法从上述评论中了解您的目的。您的电网是否连接到
BindingSource