这一行属于c#中的另一个表错误

本文关键字:另一个 错误 属于 一行 | 更新日期: 2023-09-27 18:06:45

我有2个DataGridView,即dgvEmpEnrolleesdgvEmpMustAttend,分别有一个DataTable作为数据源,即dtEnrolleesdtMustAttend

我有一个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);方法,它不会提示错误,但行不会添加。

这一行属于c#中的另一个表错误

这一行实际上是从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;
        }

相关文章: