在ADO.NET中,我使用了DataSet对象。在Window Form应用程序中,我有3个链接的listBoxes。 1.显示nr,2。"名称"表和3的值。"描述"从表。当我向dataSet添加一个新行时,我可以删除它,但问题是当我试图从beggining中删除dataSet中的行时。 删除:
int licznik = 0;
foreach(DataRow datarow in bez.dset.Tables["typ"].Rows)
{
if(datarow["nazwa"].ToString() == listBox2.SelectedItem.ToString())
{
break;
}
licznik++;
}
bez.dset.Tables["typ"].Rows[licznik].Delete();
baz是一个带有DataSet对象的类。 当我刷新listBoxes时,会出现一个错误,即无法访问已删除的信息。我做错了什么?
答案 0 :(得分:0)
Delete方法不会从DataSet表中删除该行。它只是用枚举RowState标记DataRow。DataRowState.Deleted。如果您尝试使用其RowState = DataRowState.Deleted引用DataRow,则会引发上述错误。
如果要将更改保留回数据库,则需要使用此方法。如果你考虑一下,如果在DataSet表中删除的行不再存在,你如何设法从数据库表中删除该行?
如果要删除从内存数据表中删除的行,则需要调用
bez.dset.Tables["typ"].AcceptChanges();
此调用将更改应用于内存DataTable,将每行RowState更改为DataRowState.Unchanged并删除已删除的行。当然,在此调用之后,像DbDataAdapter这样的ADO.NET类不再能够将更改保留到数据库中。
如果将DataRow的RowState设置为DataData中的DataRowState.Deleted,则需要在尝试使用之前检查每个RowState
foreach (DataRow drow in bez.dset.Tables["typ"].Rows)
{
if(drow.RowState != DataRowState.Deleted)
{
string value = drow.Field<string>("NameOfYourColumnOfStringType");
..... whatever you want to do with it....
}
}