C# 加上「;包括「;筛选到datagridview中的现有筛选器列表
我目前允许用户通过选择列名、操作数和值来过滤datagridview的值 列名、操作数和值保存到ColumnFilter实例。用户还可以为网格设置多个过滤器。我的实际过滤工作如下:C# 加上「;包括「;筛选到datagridview中的现有筛选器列表,c#,.net,datagridview,C#,.net,Datagridview,我目前允许用户通过选择列名、操作数和值来过滤datagridview的值 列名、操作数和值保存到ColumnFilter实例。用户还可以为网格设置多个过滤器。我的实际过滤工作如下: public void ApplyFilters(List<ColumnFilter> filters) { BindingSource bs = (BindingSource)dataGridView1.DataSource; bs.Filter = strin
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;
}
这只是一个例子。如何使我的ApplyFilter函数足够通用,以满足Contains操作数的需要?在设置绑定源筛选器之前,先有条件地设置
筛选器.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());
在设置绑定源筛选器之前,先有条件地设置
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());
我还没能把这件事做好。你能具体说明一下你将如何做吗?好吧,我犯了一个愚蠢的错误。我只需要删除表达式求值中的两个,因为我已经在{2}中完成了。我还没能完成这项工作。你能具体说明一下你将如何做吗?好吧,我犯了一个愚蠢的错误。我只需要删除表达式求值中的两个,因为我已经在{2}中完成了。您是否可以使用对象的强类型集合而不是
DataTable
作为数据源?那么就可以使用LINQ进行过滤了。您是否可以使用对象的强类型集合而不是数据表
作为数据源?然后可以使用LINQ进行过滤。