可能重复:
Error: Deleted row information cannot be accessed through the row. (C#)
我试图从我的DataSet中删除一行时出现此错误:
无法通过行
访问已删除的行信息
我该如何解决这个问题。
以下是我的功能:
private void btnDelete_Click(object sender, EventArgs e)
{
var result = MessageBox.Show("Proceed to deleting this location?", "Delete Location", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
var row = myData.xspArea.FindByxar_Id(pRow.xar_Id);
if (row.RowState != DataRowState.Deleted)
{
row.Delete();
MessageBox.Show("This location has been deleted", "Location Deleted", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
this.Close();
}
}
答案 0 :(得分:0)
我认为你需要在row.Delete()之后调用mData.AcceptChanges()
。
修改强>
正如@Tim Schmelter所说:
AcceptChanges
将阻止数据库中的更新,因为rowstate是datadapter用来确定如何处理行的内容
答案 1 :(得分:0)
可能值得阅读MSDN documentation以了解row.Delete()
应该做什么。
如果行的RowState已添加,则RowState将变为Detached和 调用AcceptChanges时,该行将从表中删除。
在您使用Delete方法后,RowState变为已删除 现有的DataRow。在您调用AcceptChanges之前,它仍会被删除。在 这次,DataRow将从表中删除。
通过调用RejectChanges可以取消删除已删除的行。
因此,row.Delete()
会将row.RowState
更改为DataRowState.Deleted
。
如果您希望从DataSet中删除您的行,则需要调用row.AcceptChanges()
。
答案 2 :(得分:0)
我认为异常实际上是在FindByxar_Id(pRow.xar_Id)
而不是row.Delete();
上引发的。您是否使用pRow
创建了DataRow的副本,或者该行也被删除了(可能是通过级联删除约束)?然后,您无法访问xar_Id
,因为它已被删除。
所以请检查一下:
// ...
if(pRow.RowState != DataRowState.Deleted)
{
var row = myData.xspArea.FindByxar_Id(pRow.xar_Id);
if (row.RowState != DataRowState.Deleted)
{
row.Delete();
// ...
}
// ...
如果您想更新数据库,则需要使用DataAdapter
。