当我试图删除数据表的孤立行时,我发现了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();
}
通过这种方式,我不再有任何例外。 如果您有更好的解决方案,请在此帖子上发表评论或回复!! : - )