【问题标题】:Delete old records from DataSet and reload view c#从 DataSet 中删除旧记录并重新加载视图 c#
【发布时间】:2016-09-06 19:14:32
【问题描述】:

在 ADO.NET 中,我的 DataSet 对象具有类。在 Window Form 应用程序中,我有 3 个链表框。 1. 显示 nr,2. 表中的“名称”值和 3. 表中的“描述”。当我向 dataSet 添加新行时,我可以将其删除,但问题是当我尝试从开始时删除 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 时,出现一个错误,无法访问已删除的信息。我做错了什么?

【问题讨论】:

    标签: c# ado.net dataset


    【解决方案1】:

    Delete 方法不会从 DataSet 表中删除该行。它只是用枚举 DataRowState.Deleted 标记 DataRow.RowState。如果您尝试使用其 RowState = DataRowState.Deleted 引用 DataRow,则会引发上述错误。

    如果您想将更改持久化回数据库,则需要此方法。如果您考虑一下,如果删除的行不再在 DataSet 表中,您如何设法从数据库表中删除该行?

    如果要删除从内存数据表中删除的行,则需要调用

    bez.dset.Tables["typ"].AcceptChanges();
    

    此调用将您的更改应用于内存中的 DataTable,将每行 RowState 更改为 DataRowState.Unchanged 并删除已删除的行。当然,在此调用之后,像 DbDataAdapter 之类的 ADO.NET 类不再能够将您的更改持久化回数据库。

    如果您将 DataRow 的 RowState 设置为 DataRowState.Deleted 在您的 Datatable 中,那么您需要在尝试使用之前检查每个 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....
       }
    }
    

    【讨论】:

    • 所以我应该在显示每一行之前检查它是否被 bez.dset.Tables["typ"].Rows[licznik].Delete();如果不是,则显示它?
    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2013-01-25
    • 2020-10-22
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多