在 C# WPF 中使用数据表筛选数据网格的正确方法



我正在创建一个WPF应用程序。有一个显示我的项目的DataGrid和搜索栏来过滤数据。如您所知,我们不能从另一个数据表中引用Dataable中的特定行。因此,我现在的过滤方法是克隆我的原始数据库,并将与搜索栏文本匹配的行添加到克隆的数据表中。之后,将数据网格的ItemsSource设置为克隆的数据表以显示筛选的行。

现在的问题是,当我使用过滤行编辑数据网格时,显然正在修改克隆的数据表而不是原始数据表。那么如何在原始数据表中进行这些更改呢?

我尝试从原始数据表中引用行,但这是不可能的,因为内存中的一个DataRow只能有一个容器,在这种情况下是原始数据表。

编辑

答案很简单,而不是使用 2DataTable使用为此目的而设计的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;

最新更新