从DataSet中删除旧记录并重新加载视图c#

时间:2016-05-11 11:48:03

标签: c# ado.net dataset

在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时,会出现一个错误,即无法访问已删除的信息。我做错了什么?

1 个答案:

答案 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....
   }
}