这一行属于c#中的另一个表错误
本文关键字:另一个 错误 属于 一行 | 更新日期: 2023-09-27 18:06:45
我有2个DataGridView,即dgvEmpEnrollees
和dgvEmpMustAttend
,分别有一个DataTable作为数据源,即dtEnrollees
和dtMustAttend
。
我有一个btnRemove
,它删除dgvEmpEnrollees
datagridview dtEnrollees
DataTable中当前选择的行,并立即更新datagridview,我希望在第二个DT和DGV中添加相同的行。
注意:2个datatable是克隆的:
btnRemove
代码片段如下:
private void btnRemove_Click(object sender, EventArgs e)
{
DataRowView currentDataRowView = (DataRowView)dgvEmpEnrollees.CurrentRow.DataBoundItem;
DataRow row = currentDataRowView.Row;
dtEnrollees.Rows.Remove(row);
dgvEmpEnrollees.DataSource = null;
dgvEmpEnrollees.DataSource = dtEnrollees;
dtMustAttend.Rows.InsertAt(row,0);
dgvEmpMustAttend.DataSource = null;
dgvEmpMustAttend.Rows.Clear();
dgvEmpMustAttend.DataSource = dtMustAttend;
}
这一行属于另一个表,c#错误提示之后。
我也尝试了dtMustAttend.ImportRow(row);
方法,它不会提示错误,但行不会添加。
这一行实际上是从DataTable
中删除的:
dtEnrollees.Rows.Remove(row);
同时从行中删除所有数据。如果在Remove()
之后检查ItemArray
-属性,它将显示:
'test.ItemArray' threw an exception of type 'System.Data.RowNotInTableException'
另一个问题是行仍然有Table
-属性设置到它所在的表。一开始您使用了InsertAt()
-方法,但是它失败了,因为Table
-属性仍然被设置为其他表。
当你使用ImportRow()
时,行已经清除了它的ItemArray
,所以你试图添加一个空行。
我找到了解决方案,但我不知道背后的解释是什么。
我试着交换导入和删除代码(首先是导入),它工作了。
工作代码片段:
private void btnRemove_Click(object sender, EventArgs e)
{
DataRowView currentDataRowView = (DataRowView)dgvEmpEnrollees.CurrentRow.DataBoundItem;
DataRow row = currentDataRowView.Row;
dtMustAttend.ImportRow(row);
dgvEmpMustAttend.DataSource = null;
dgvEmpMustAttend.Rows.Clear();
dgvEmpMustAttend.DataSource = dtMustAttend;
dtEnrollees.Rows.Remove(row);
dgvEmpEnrollees.DataSource = null;
dgvEmpEnrollees.DataSource = dtEnrollees;
}
我不知道为什么代码不工作,如果删除事务先来:
private void btnRemove_Click(object sender, EventArgs e)
{
DataRowView currentDataRowView = (DataRowView)dgvEmpEnrollees.CurrentRow.DataBoundItem;
DataRow row = currentDataRowView.Row;
dtEnrollees.Rows.Remove(row);
dgvEmpEnrollees.DataSource = null;
dgvEmpEnrollees.DataSource = dtEnrollees;
dtMustAttend.ImportRow(row);
dgvEmpMustAttend.DataSource = null;
dgvEmpMustAttend.Rows.Clear();
dgvEmpMustAttend.DataSource = dtMustAttend;
}