You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET DataTable过滤疑问:如何让原表同步过滤后的结果?

如何将DataTable更新为DefaultView过滤后的结果?

DataView本质是DataTable的视图层,它的过滤、排序操作只会改变显示内容,不会修改底层的DataTable原始数据,所以你看到原表还保留Code='X'的记录是正常的。要让原表同步成过滤后的结果,有两种常用方法:

方法一:从视图生成新表替换原表

通过DataView.ToTable()把过滤后的视图转换成新的DataTable,再替换或合并到原表:

// 从过滤后的DefaultView生成新表
DataTable filteredTable = myDataSet.myTable.DefaultView.ToTable();

// 方案1:清空原表后合并新表数据(保留原表结构、约束)
myDataSet.myTable.Clear();
myDataSet.myTable.Merge(filteredTable);

// 方案2:直接替换原表(适合不需要保留原表额外配置的场景)
myDataSet.Tables.Remove("myTable");
filteredTable.TableName = "myTable";
myDataSet.Tables.Add(filteredTable);

方法二:直接删除原表中不符合条件的行

如果不想生成新表,直接遍历原表删除Code='X'的行(注意要倒序遍历,避免索引错乱):

// 倒序遍历行,防止删除行后索引偏移导致漏删
for (int i = myDataSet.myTable.Rows.Count - 1; i >= 0; i--)
{
    DataRow row = myDataSet.myTable.Rows[i];
    // 注意判断Null值,避免空引用异常
    if (!row.IsNull("Code") && row["Code"].ToString() == "X")
    {
        row.Delete();
    }
}
// 提交所有删除操作
myDataSet.myTable.AcceptChanges();

两种方法的适用场景:

  • 方法一适合数据量大、需要快速生成过滤结果,或者原表结构简单的情况;
  • 方法二更适合需要保留原表的约束、关系,且数据量不大的场景。

内容的提问来源于stack exchange,提问作者Rich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:53:12