【问题标题】:Delete a specific row from datatable从数据表中删除特定行
【发布时间】:2015-08-29 20:07:14
【问题描述】:

我正在尝试从数据表中删除特定行。添加最后一行时,我需要删除黄色行。从如下数据表中选择非常容易

DataRow[] dr = dt.Select("STOK_KODU='HAMMADDE_2'");

我想知道是否有像下面这样的方法来删除???或者您会建议一种从数据表中删除行的简单方法吗?

dt.Delete("STOK_KODU='HAMMADDE_2'");

【问题讨论】:

  • 是要从内存数据表中删除行还是要从后端数据库表中删除它们?

标签: c# datatable


【解决方案1】:

一种方法是使用要保留的行重新创建表:

dt = dt.AsEnumerable()
    .Where(row => row.Field<string>("STOK_KODU") != "HAMMADDE_2")
    .CopyToDataTable()

另一种是使用DataRowCollection.Remove

DataRow[] rowsToRemove = dt.Select("STOK_KODU='HAMMADDE_2'");
foreach (var rowToDelete in rowsToRemove)
    dt.Rows.Remove(rowToDelete);

如果您想删除几行并且表很大,则第二种方法更有效。使用 LINQ 的第一种方法更强大,因为您可以使用任何代码,但效率可能较低。

【讨论】:

    【解决方案2】:

    您可以访问DataTableRows 集合:

    foreach (var row in dr)
        dt.Rows.Remove(row);
    

    【讨论】:

      【解决方案3】:

      试试这个 ::

      DataRow[] rows;
      rows=dt.Select("STOK_KODU='HAMMADDE_2'"); 
      foreach(DataRow r in rows)
      r.Delete();
      

      【讨论】:

      • 这不会从表中删除行,也不会删除数据库中的行(不使用DataAdapter)。它只会将行状态设置为Deleted,这是DataAdapter 的标志。
      • @TimSchmelter 我只是在写它。但是the fastest gun in the west 又来了 :-))
      • @ayilmaz Tim 是对的,如果你想删除行,那么你应该使用Rows.Remove
      【解决方案4】:

      从内存中的 DataTable 对象中删除行非常简单

      dt.Select("STOK_KODU='HAMMADDE_2'").AsEnumerable().ToList().ForEach(x => x.Delete());
      

      但是您应该考虑到 Delete 方法只是将 RowState 标记为已删除,但行仍在 DataTable.Rows 集合中。要真正删除它们,您需要调用

      dt.AcceptChanges();
      

      如果没有这个调用,如果你循环遍历数据表行集合,你需要检查 RowState 以避免错误消息指出你不能访问已删除行的信息

      foreach(DataRow r in dt.Rows)
      {
      
          if(r.RowState != DataRowState.Deleted)    
               Console.WriteLine(r[0].ToString()); 
      }
      

      【讨论】:

      • DataTable.AcceptChanges 不会删除具有RowState=Deleted 的行。这将使RowState=Unchanged。这只是 DataAdapter 的一个标志,它在更新数据源后将调用 AcceptChanges 本身。您可以通过在调用 AcceptChanges 之前和之后在调试器中检查 dt.GetChanges() 来轻松检查。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      相关资源
      最近更新 更多