Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法以编程方式将行添加到DataGridView的行集合_C#_Sql_Winforms_Visual Studio_Datagridview - Fatal编程技术网

C# 无法以编程方式将行添加到DataGridView的行集合

C# 无法以编程方式将行添加到DataGridView的行集合,c#,sql,winforms,visual-studio,datagridview,C#,Sql,Winforms,Visual Studio,Datagridview,我的c程序有点问题。 我有两个DataGridView,第一个是从本地主机数据库加载的记录。单击A按钮时,从第一个DataGridView中选择的记录将转到第二个DGV,并从第一个DGV中删除。当我单击B按钮时,所选记录应返回到第一个DGV,并应从第二个DGV中删除,但VS会大声喊叫,不能以编程方式将行添加到DGV 这是我的密码: //copy rows public void Kopiuj() { foreach (Da

我的c程序有点问题。 我有两个DataGridView,第一个是从本地主机数据库加载的记录。单击A按钮时,从第一个DataGridView中选择的记录将转到第二个DGV,并从第一个DGV中删除。当我单击B按钮时,所选记录应返回到第一个DGV,并应从第二个DGV中删除,但VS会大声喊叫,不能以编程方式将行添加到DGV

这是我的密码:

    //copy rows                 
    public void Kopiuj()
    {
        foreach (DataGridViewRow row in this.dataGridView1.SelectedRows)
        {
            object[] rowData = new object[row.Cells.Count];
            for (int i = 0; i < rowData.Length; ++i)
            {
                rowData[i] = row.Cells[i].Value;
            }

            this.dataGridView2.Rows.Add(rowData);
        }
    }


 //delete rows

    public void Usun()
    {
        foreach (DataGridViewRow selRow in dataGridView1.SelectedRows.OfType<DataGridViewRow>().ToArray())
        {
            dataGridView1.Rows.Remove(selRow);
        }
     }

//adding collumns cause it's neccesary
public void DodajKolumny()
{

    while (dataGridView2.Columns.Count < dataGridView1.Columns.Count)
    {
        foreach (DataGridViewColumn c in dataGridView1.Columns)
        {
            dataGridView2.Columns.Add(c.Clone() as DataGridViewColumn);
        }
    }


}
下面是方法代码,它不会将所选行从DGV2复制到DGV1:

public void KopiujW()
{
    foreach (DataGridViewRow row in this.dataGridView2.SelectedRows)
    {
        object[] rowData = new object[row.Cells.Count];
        for (int i = 0; i < rowData.Length; ++i)
        {
            rowData[i] = row.Cells[i].Value;

            dataGridView1.Rows.Add(rowData);
        }

        dataGridView1.Rows.Add(rowData);
    }
}

如果你们能告诉我这段代码有什么问题。谢谢你的回答。Cheers

网格绑定到数据源,因此它不允许您以这种方式添加数据。使用binding DataSource.AddNew方法在“for”循环中的代码第一行添加行。然后参考DataGridView的当前行。当前行将是绑定数据源控件添加的行。通过这种方式,您可以修改行中每个单元格的数据。

您可能需要的是,在从第二个网格删除时,将这些项目添加到数据源,以便更新第一个网格。更好的方法是从绑定到gridview的数据源集合中添加/删除所需行,而不是直接将行添加到gridview。操作完数据源后,请使用dataGridView1.DataBind或dataGridView2.DataBind将数据绑定回。