添加“Contains"筛选到datagridview中现有的筛选器列表
本文关键字:筛选 列表 datagridview Contains quot 添加 | 更新日期: 2023-09-27 17:53:12
我目前允许用户通过选择列名、操作数和值来筛选datagridview的值。
列名、操作数和值保存到ColumnFilter实例中。用户还可以为网格设置多个过滤器。我实际的过滤是这样的:
public void ApplyFilters(List<ColumnFilter> filters)
{
BindingSource bs = (BindingSource)dataGridView1.DataSource;
bs.Filter = string.Join(" AND ", filters.Select(filter=>string.Format("{0} {1} '{2}'", filter.ColumnName, filter.Operand, filter.Value)).ToArray());
dataGridView1.DataSource = bs;
}
对于您可能想要应用的许多过滤器都可以很好地工作。我当前可用的操作数列表是:{=,>,<,>=,<=,<>}。现在我想再添加一个操作数,即Contains。如果有人想搜索字符串列,他们可以通过这个操作数。
筛选Contains的一个简单方法是:
var dt = (DataTable)dataGridView1.DataSource;
dt.DefaultView.RowFilter = string.Format("Column like '%{0}%'", txtBoxSearch.Text.Trim().Replace("'", "''"));
dataGridView1.DataSource = dt;
这只是一个例子。我如何使我的ApplyFilters函数足够通用,以满足包含操作数?
在设置绑定源过滤器之前,先有条件地设置filter.Value
。
filter.Value = filter.Operand == "like" ? "'%" + filter.Value + "%'" : filter.Value;
然而,灵活过滤仍然比这更复杂。如果列不是文本数据怎么办?
更新
代替我所说的,把表达式放入你的Select
bs.Filter = string.Join(" AND ",
filters.Select(filter=>string.Format("{0} {1} '{2}'",
filter.ColumnName, filter.Operand,
filter.Operand == "like" ? "'%" + filter.Value + "%'" : filter.Value)).ToArray());