用列表过滤数据表

本文关键字:数据表 过滤 列表 | 更新日期: 2023-09-27 18:16:10

我想删除包含列表中提供的现有站点的所有Datatable行。但是我的代码的问题是它只从Datatable中删除List的最后一项。

对不起,第一次有一点模糊的问题,但修复一个遗留的应用程序,所以不得不使用。net 2.0:(我知道我的逻辑问题,只是无法找到替代!

DataView cView = result.DefaultView;
foreach (string items in existingSites)
{
    cView.RowFilter = "Sites <> '" + items + "'";
}
dgvResult.DataSource = cView;

用列表过滤数据表

可以使用LINQ (>= .NET 3.5)吗?

DataTable result = result.AsEnumerable()
    .Where(row => !items.Contains(row.Field<string>("Sites")))
    .CopyToDataTable();

这是因为您一直在重置过滤器。试试这个:

DataView cView = result.DefaultView;
StringBuilder sb = new StringBuilder();
bool first = true;
foreach (string items in existingSites)
{
    if (first)
    {
        first = false;
    }
    else
    {
        sb.Append(" AND ");
    }
    sb.AppendFormat("Sites <> '{0}'", items);
}
cView.RowFilter = sb.ToString();
dgvResult.DataSource = cView;

当然,这不是最好的解决方案,如果你可以使用新的框架选项,如LINQ(参见Tim的回答)。