c# - 在 C# WPF 中使用数据表过滤数据网格的正确方法
问题描述
我正在创建一个 WPF 应用程序。有一个DataGrid
显示我的项目和搜索栏来过滤数据。如您所知,我们不能将 a 中的特定行从Dataable
另一个数据表中引用。所以我现在过滤的方式是克隆我的原始数据库并将与搜索栏文本匹配的行添加到克隆的数据表中。之后将数据网格设置ItemsSource
为克隆的数据表以显示过滤的行。
现在的问题是,当我用过滤的行编辑我的数据网格时,显然克隆的数据表正在被修改,而不是原始数据表。那么我怎样才能在原始数据表中进行这些更改呢?
我尝试从原始数据表中引用行,但这不可能,因为DataRow
内存中的一个容器只能有一个容器,在这种情况下是原始数据表。
编辑
答案很简单,而不是使用专为此目的设计的2 DataTable
use a 。DataView
请参阅下面的修改后的代码。
我的过滤逻辑:
var filteredTable = dt.Clone();
foreach( DataRow row in dt.Rows)
{
if(row[FilterCategory].ToString().StartsWith(txtb_search.Text))
{
filteredTable.Rows.Add(row.ItemArray);
}
}
ItemsGrid.ItemsSource = filteredTable.DefaultView;
解决方案
以下是如何使用 DataView 进行过滤的正确方法。根据filter
要求,字符串可以有多种形式。sortColumn
是filterColumn
现在,但可以是任何基于排序的列。这是所有这一切的快速教程:http ://www.csharp-examples.net/dataview-rowfilter/
string filterColumn = dt.Columns[columnIndex].ToString();
string filter = filterColumn + " LIKE '" + txtb_search.Text + "*'";
DataView dv = new DataView(dt, filter, sortColumn , DataViewRowState.CurrentRows);
ItemsGrid.ItemsSource = dv;
推荐阅读
- windows - Docker for Windows 网络慢
- sql-server - 无法与 SQL Server 数据库断开连接
- javascript - 无法使用响应事件
- laravel - 获取belongsToMany关系中某个根类别ID下的所有页面
- git - 如何删除 1 个月以前在 git 中以编程方式合并到 master 的分支?
- xamarin - 网络标准库项目中的资源?
- regex - 正则表达式检查电话号码的变化
- javascript - Vue.js:使用 JS 虚拟键盘时 V-Model 输入未更新
- python - 具有可变默认参数的 Python 数据类继承返回零值
- powerbi - DAX 将日期转换为季度的第一天