C# 从数据表中删除数据行

C# 从数据表中删除数据行,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个windows应用程序,其中我将从datatable中删除一个datarow。 但我有个例外 给定的DataRow不在当前DataRowCollection中 守则: DataTable dt = new DataTable(); DataRowView currentDataRowView = (DataRowView)DataGridView1.CurrentRow.DataBoundItem; DataRow row = currentDataRowView.Row; dt.Ro

我有一个windows应用程序,其中我将从datatable中删除一个datarow。 但我有个例外

给定的DataRow不在当前DataRowCollection中

守则:

DataTable dt = new DataTable();
DataRowView currentDataRowView = (DataRowView)DataGridView1.CurrentRow.DataBoundItem;
DataRow row = currentDataRowView.Row;

dt.Rows.Remove(row); // exception here.
DataGridView1.DataSource = dt;
数据表dt的信息如图所示。

我认为我已经将datarowview转换为datarow

编辑: dt是从另一个DataGridView创建的

                foreach (DataGridViewRow row in DatGridView2.Rows)
                {
                    DataGridViewCheckBoxCell check = row.Cells[0] as DataGridViewCheckBoxCell;
                    if (check.Value != null)
                    {
                        if ((bool)check.Value)
                        {
                            //this row has a checkBox set to true (tick is added)
                            //add this row to dataTable ...
                            DataRow myRow = (row.DataBoundItem as DataRowView).Row;
                            DataRow dr = dt.NewRow();
                            dr[0] = myRow[0];
                            dr[1] = myRow[1];
                            dr[2] = myRow[2];
                            dr[3] = myRow[3];
                            if (!dt.Rows.Contains(dr[0]))
                            {
                                dt.Rows.Add(dr);
                            }
                        }
                    }

我认为您不能引用与
CurrentRow.DataBoundItem
所在的数据表不同的数据表

您的
dt
数据表是从DataGridView2构建的,但
CurrentRow.DataBoundItem
来自DataGridView1


您必须自己在DataGridView1中找到匹配的行,然后才能删除它。

我认为您不能引用与当前行.DataBoundItem所在的数据表不同的数据表

您的
dt
数据表是从DataGridView2构建的,但
CurrentRow.DataBoundItem
来自DataGridView1


您必须自己在DataGridView1中找到匹配的行,然后才能删除它。

我已经尝试了您的代码,并且它可以正常工作:

        DataTable dt = (DataTable)dataGridView1.DataSource;
        DataRowView currentDataRowView = (DataRowView)dataGridView1.Rows[0].DataBoundItem;
        DataRow row = currentDataRowView.Row;

        dt.Rows.Remove(row); 
        dataGridView1.DataSource = dt;

正如我在上面所写的,错误“给定的数据行不在当前数据行集合中”意味着您试图删除一个不在数据表“dt”中的行。

我已经尝试了您的代码,它可以正常工作:

        DataTable dt = (DataTable)dataGridView1.DataSource;
        DataRowView currentDataRowView = (DataRowView)dataGridView1.Rows[0].DataBoundItem;
        DataRow row = currentDataRowView.Row;

        dt.Rows.Remove(row); 
        dataGridView1.DataSource = dt;

正如我在上面所写的,错误“给定的数据行不在当前数据行集合中”意味着您试图删除一个不在数据表“dt”中的行。

您的
dt
没有行,因此没有要删除的行。dt.rows.Count=2。它有行。dt从哪里获取行?根据您的代码,在尝试从中删除行之前会声明几行。您的
dt
没有行,因此没有要删除的行。dt.rows.Count=2。它有行。dt从哪里获取行?根据您的代码,在尝试从中删除行之前,会声明几行。完全错误。DataRow row=currentDataRowView.row;我已经给它下了定义。@Love我不知道你发的帖子是否足够回答它。
DataTable dt=newdatatable()
似乎不正确,因为它是“新的”,并且在设置之前似乎与DataGridView的数据源没有任何关系。请参阅更新。现在错误变成了“给定的数据行不在当前的数据行集合中。”不确定为什么?据我所知,您有一个以数据为边界的gridview,在删除时,您用检查为true的所有数据填充dt对象,然后尝试从中删除。可能是您试图删除未添加到dt集合的行。@Love更新了答案。看起来
来自不同的DataGridView源,因此集合看不到相同的引用。完全错误。DataRow row=currentDataRowView.row;我已经给它下了定义。@Love我不知道你发的帖子是否足够回答它。
DataTable dt=newdatatable()
似乎不正确,因为它是“新的”,并且在设置之前似乎与DataGridView的数据源没有任何关系。请参阅更新。现在错误变成了“给定的数据行不在当前的数据行集合中。”不确定为什么?据我所知,您有一个以数据为边界的gridview,在删除时,您用检查为true的所有数据填充dt对象,然后尝试从中删除。可能是您试图删除未添加到dt集合的行。@Love更新了答案。看起来
来自不同的DataGridView源,因此集合看不到相同的引用。