从数据表中删除特定行

时间:2014-02-04 11:59:14

标签: c# datatable

我正在尝试从datatable中删除特定行。添加最后一行时,我需要删除黄色行。从下面的数据表中选择

非常容易
DataRow[] dr = dt.Select("STOK_KODU='HAMMADDE_2'");

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

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

enter image description here

4 个答案:

答案 0 :(得分:3)

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

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的第一种方法更强大,因为您可以使用任何代码但效率较低。

答案 1 :(得分:1)

您可以访问Rows的<{1}}集合:

DataTable

答案 2 :(得分:1)

试试这个::

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

答案 3 :(得分:1)

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

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

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

dt.AcceptChanges();

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

foreach(DataRow r in dt.Rows)
{

    if(r.RowState != DataRowState.Deleted)    
         Console.WriteLine(r[0].ToString()); 
}