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

如何将DataSet中单个表的数据绑定到两个WPF DataGrid并按列值过滤?

解决方案:按字段值拆分DataTable到两个DataGrid

针对你要把同一个DataTable里的行按0/1字段拆分到两个DataGrid的需求,这里有两种实用的实现方式,你可以根据自己的场景挑着用:


方法一:查询时直接拆分(推荐,更高效)

如果你的数据是从SQLite读取的,直接在查询阶段就分别获取值为0和1的数据集,能避免先加载全量数据再过滤的额外开销:

// 先定义数据库连接字符串
string connStr = $"Data Source={configurations_folder}{AppDbFile}";

// 获取值为0的数据集,绑定到第一个DataGrid
using (SQLiteConnection con = new SQLiteConnection(connStr))
{
    con.Open();
    // 替换YourFlagColumn为你实际存储0/1的字段名
    string query0 = "SELECT * FROM Audio WHERE YourFlagColumn = 0"; 
    SQLiteDataAdapter adapter0 = new SQLiteDataAdapter(query0, con);
    defaultDataSet.AudioDataTable audioTable0 = new defaultDataSet.AudioDataTable();
    adapter0.Fill(audioTable0);
    // 替换dataGrid0为你的第一个DataGrid控件名
    dataGrid0.DataSource = audioTable0; 
}

// 获取值为1的数据集,绑定到第二个DataGrid
using (SQLiteConnection con = new SQLiteConnection(connStr))
{
    con.Open();
    // 替换YourFlagColumn为你实际存储0/1的字段名
    string query1 = "SELECT * FROM Audio WHERE YourFlagColumn = 1"; 
    SQLiteDataAdapter adapter1 = new SQLiteDataAdapter(query1, con);
    defaultDataSet.AudioDataTable audioTable1 = new defaultDataSet.AudioDataTable();
    adapter1.Fill(audioTable1);
    // 替换dataGrid1为你的第二个DataGrid控件名
    dataGrid1.DataSource = audioTable1; 
}

小提示:用using包裹数据库连接可以自动释放资源,避免连接泄漏;记得把代码里的占位符替换成你项目里的实际字段名和控件名。


方法二:加载全量数据后用DataView过滤

如果已经把完整的DataTable加载到DataSet里了,也可以用DataView的RowFilter来过滤数据,再绑定到DataGrid:

// 先加载完整的AudioDataTable到DataSet(可以补充你原有的代码逻辑)
defaultDataSet.AudioDataTable audio_table = new defaultDataSet.AudioDataTable();
string connStr = $"Data Source={configurations_folder}{AppDbFile}";
using (SQLiteConnection con = new SQLiteConnection(connStr))
{
    con.Open();
    string fullQuery = "SELECT * FROM Audio";
    SQLiteDataAdapter adapter = new SQLiteDataAdapter(fullQuery, con);
    adapter.Fill(audio_table);
}

// 过滤值为0的行,绑定到第一个DataGrid
DataView dv0 = new DataView(audio_table);
dv0.RowFilter = "YourFlagColumn = 0"; // 替换为实际字段名
dataGrid0.DataSource = dv0;

// 过滤值为1的行,绑定到第二个DataGrid
DataView dv1 = new DataView(audio_table);
dv1.RowFilter = "YourFlagColumn = 1"; // 替换为实际字段名
dataGrid1.DataSource = dv1;

这种方式适合已经持有全量数据的场景,好处是不用多次查询数据库,但如果数据量很大,还是方法一的性能更优。

最后别忘了确认DataGrid的列配置(自动生成列或手动绑定列),这样数据才能正常显示哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:46:39