Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加上「;包括「;筛选到datagridview中的现有筛选器列表_C#_.net_Datagridview - Fatal编程技术网

C# 加上「;包括「;筛选到datagridview中的现有筛选器列表

C# 加上「;包括「;筛选到datagridview中的现有筛选器列表,c#,.net,datagridview,C#,.net,Datagridview,我目前允许用户通过选择列名、操作数和值来过滤datagridview的值 列名、操作数和值保存到ColumnFilter实例。用户还可以为网格设置多个过滤器。我的实际过滤工作如下: public void ApplyFilters(List<ColumnFilter> filters) { BindingSource bs = (BindingSource)dataGridView1.DataSource; bs.Filter = strin

我目前允许用户通过选择列名、操作数和值来过滤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;
    }

这只是一个例子。如何使我的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进行过滤。