C# 从数据表中删除数据行
我有一个windows应用程序,其中我将从datatable中删除一个datarow。 但我有个例外 给定的DataRow不在当前DataRowCollection中 守则: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
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源,因此集合看不到相同的引用。