数据表无法移除最后/唯一/孤独行

时间:2014-07-24 13:31:37

标签: c# datagridview datatable row

当我试图删除数据表的孤立行时,我发现了System.NullReferenceException,使用按钮单击显示在datagridview中。 此数据表位于数据集中,该数据集由XLM架构和XML文件生成。 但是,如果我在这个数据表中有超过1行,我可以删除所选的一行而不会抛出任何异常。

我在stackoverflow上探讨了很多帖子,但是他们中的任何人都可以帮助我!

我向你提供了抛出异常的代码部分:

private void button4_Click(object sender, EventArgs e)
{
        DialogResult removeLocationChoice = MessageBox.Show("Are you sure you want to delete this location ?", "Remove location ?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (removeLocationChoice == DialogResult.Yes)
        {
            // Get the index of the currentrow from datagridview1
            int currentIndex = (this.dataGridView1.CurrentRow.Index);
            // Remove the selected row into the dataset
            Functions.settingsDataSet.Tables["Location"].Rows[currentIndex].Delete();
            // Commit changes to dataset
            Functions.settingsDataSet.Tables["Location"].AcceptChanges();
            // Commit changes from dataset to XML file
            Functions.commitXml();
        }
}

仅供参考我使用Visual Studio 2010。

我在调试器中找到了这些奇怪的值:

Functions.settingsDataSet.Tables["Location"].Rows[currentIndex].newRecord = -1
.RowState = Detached

请不要犹豫,向我询问更多信息和其他代码部分。 我怀疑由于标题而导致错误,但我不确定。

好的新更新: 我找到了解决方案,但不是最好的! 我从数据集中删除了我的表,然后我重新应用XML模式来恢复没有任何行的表:

public static void removeRow(string table, int row)
    {
        if (row == 0)
        {
            settingsDataSet.Tables.Remove(table);
            settingsDataSet.ReadXmlSchema(settingsSchema);
            settingsDataSet.AcceptChanges();
        }
        else
        {
            settingsDataSet.Tables[table].Rows.RemoveAt(row);
            settingsDataSet.Tables[table].AcceptChanges();
        }
        commitXml();
    }

通过这种方式,我不再有任何例外。 如果您有更好的解决方案,请在此帖子上发表评论或回复!! : - )

0 个答案:

没有答案