我有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);
方法,它没有提示错误,但该行不会添加。
任何帮助将不胜感激。
答案 0 :(得分:1)
该行实际上已从DataTable
中删除了该行:
dtEnrollees.Rows.Remove(row);
此外,还会从行中删除所有数据。如果您在ItemArray
之后查看Remove()
- 属性,则会说明:
'test.ItemArray' threw an exception of type 'System.Data.RowNotInTableException'
另一个问题是该行仍然将Table
- 属性设置为表所在的位置。起初使用了InsertAt()
- 方法,但它失败了,因为Table
- 属性仍然设置为其他表。
当您使用ImportRow()
时,该行已清除ItemArray
,因此您尝试添加空行。
答案 1 :(得分:-1)
我找到了解决方案,但我不知道背后的解释是什么。
我尝试交换导入和删除代码(导入首先)并且它有效。
工作代码段:
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;
}
非常感谢任何解释。