如何将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
相关产品推荐
相关产品推荐

