此行属于C#中的另一个表错误

时间:2014-06-05 08:09:39

标签: c# winforms datagridview datatable

我有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);方法,它没有提示错误,但该行不会添加。 任何帮助将不胜感激。

2 个答案:

答案 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;

        }

非常感谢任何解释。