我想删除包含List中提供的现有站点的所有Datatable行。但我的代码的问题是它只从数据表中删除了List的最后一项。
很抱歉第一次有点模棱两可,但是修复遗留应用所以必须使用.net 2.0 :(我知道我的逻辑问题,只是无法找到替代品!
DataView cView = result.DefaultView;
foreach (string items in existingSites)
{
cView.RowFilter = "Sites <> '" + items + "'";
}
dgvResult.DataSource = cView;
答案 0 :(得分:4)
你能使用LINQ(&gt; = .NET 3.5)吗?
DataTable result = result.AsEnumerable()
.Where(row => !items.Contains(row.Field<string>("Sites")))
.CopyToDataTable();
答案 1 :(得分:2)
那是因为你不断重置过滤器。试试这个:
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;
当然,如果您可以使用更新的框架选项(如TimQ的答案),这不是最好的解决方案。