Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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# 使用datatable作为源的DataGridView列筛选器_C#_Datagridview_Datatable - Fatal编程技术网

C# 使用datatable作为源的DataGridView列筛选器

C# 使用datatable作为源的DataGridView列筛选器,c#,datagridview,datatable,C#,Datagridview,Datatable,在c#中,我尝试使用列下拉筛选,同时使用数据表作为列和行数未知的数据源。我找到的所有示例和帮助都引用了一个包含已知列数据的数据库,但我正在处理多个数据库,需要一个动态列过滤器。就像excel或powerpivot一样。所以,如果数据库被更改,列被删除或添加,它仍然可以工作。在这里找到了解决方案 我开始写答案,然后意识到我的解决方案是非常复杂的,所以我只给你一点提示:你可能想考虑使用DATAVIEW而不是DATABATE作为DATAGIDView的数据源。它可以排序,并且具有string RowF

在c#中,我尝试使用列下拉筛选,同时使用数据表作为列和行数未知的数据源。我找到的所有示例和帮助都引用了一个包含已知列数据的数据库,但我正在处理多个数据库,需要一个动态列过滤器。就像excel或powerpivot一样。所以,如果数据库被更改,列被删除或添加,它仍然可以工作。

在这里找到了解决方案

我开始写答案,然后意识到我的解决方案是非常复杂的,所以我只给你一点提示:你可能想考虑使用DATAVIEW而不是DATABATE作为DATAGIDView的数据源。它可以排序,并且具有string RowFilter属性,因此列名和筛选值可以作为字符串动态传递(例如,RowFilter=myclname+“=”+myFilteredValue;或RowFilter=myclname+”(“+myFilteredValue+”)中的字符串),您可以对其使用类似SQL的语法。不像LINQ那样优雅,但您不必预定义列。这是一个选项,但我更喜欢使用datatable作为源,这样可以避免导入数据时的大量麻烦。有datatable.DefaultView。使用DataView,您只需在DataTable上应用过滤逻辑。我甚至认为过滤时不必更改DataGridView的源代码。虽然为列标题创建自定义上下文菜单和实现过滤逻辑可能需要大量工作,但是使用一些现有的解决方案可能会更好。