c# - DataTable,如何有条件地删除行

标签 c# datatable delete-row

我正在进行 C# 学习过程,目前进展顺利。然而,我刚刚打了我的第一个“说什么?”时刻。

DataTable 提供对其 Rows 集合的随机行访问,不仅通过典型的集合行为,而且通过 DataTable.Select。但是,我似乎无法将此功能与 DataRow.Delete 联系起来。到目前为止,这似乎是我需要做的,以便有条件地从表中删除一行或多行。

int max = someDataTable.Rows.Count - 1;
for(int i = max; i >= 0; --i)
{
    if((int)someDataTable.Rows[i].ItemArray[0] == someValue)
    {
        someDataTable.Rows[i].BeginEdit();
        someDataTable.Rows[i].Delete();
    }
    else
        break;
}
someDataTable.AcceptChanges();

但我对这段代码不满意。我也不相信。我肯定错过了什么。如果我需要有条件地删除一个或多个行,我真的必须按顺序点击 Rows 集合吗?

(不要介意倒置的for。我从数据表的末尾删除。所以没关系)

最佳答案

您可以查询数据集,然后循环选择行以将它们设置为删除。

var rows = dt.Select("col1 > 5");
foreach (var row in rows)
   { row.Delete(); }
   dt.AcceptChanges();
   

...您还可以创建一些扩展方法以使其更容易...

myTable.Delete("col1 > 5");

public static DataTable Delete(this DataTable table, string filter)
{
    table.Select(filter).Delete();
    return table;
}
public static void Delete(this IEnumerable<DataRow> rows)
{
    foreach (var row in rows)
        row.Delete();
}

关于c# - DataTable,如何有条件地删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591771/

相关文章:

google-apps-script - 从 Google 文档中的两个不同表中删除行很困难

ios - 如何限制只对某些用户删除 TableView 中的行?

c# - Xaml 和事件不起作用

c# - 强制转换为无效枚举值 Enum.ToObject,不会引发异常,将 Enum 设置为 int

jsf - 如何为数据表列创建复合组件?

jsf - 显示来自 Backing Bean 的 Primefaces confirmDialog

c# - .NET 反射来识别属性关系

c# - 绕过 TextBox 的字符限制?

javascript - jquery 数据表过滤行

php - 使用php删除数据库中的特定表