gpt4 book ai didi

c# - 使用在列上方可见的过滤器过滤每列的 DataGridView

转载 作者:行者123 更新时间:2023-11-30 18:10:30 27 4
gpt4 key购买 nike

我有一个相当具体的问题-

我希望能够从数据库中检索数据,将其显示在 DataGridView 中,并允许用户通过在每列上方输入简单的筛选查询来筛选列。

例如:-

        | Foo   | Bar                 | Baz |
------------------------------------|
Filters | > 10 | 1/1/1980 - 1/1/2009 | Boo |
| 12 | 1/3/1995 | Boo |
| 99 | 5/12/2005 | Boo |
etc.

我认为最能解决这个问题的方法是有两个数据表,一个充当 DataGridView 的数据源(这样我就可以让 View 自动生成列,而不必编写一大堆样板文件来插入行我自己),它本身由一行组成,用于保存过滤器和它下面的数据库数据,第二行保存可以通过编程方式附加到第一行的数据库数据。

该解决方案的问题在于,列受列类型的限制,例如,此处 Foo 是一个整数,Bar 是一个 DateTime,而 Baz 是一个字符串。当尝试将过滤器文本输入到 Foo 或 Bar 时,DataGridView 会抛出一个错误,指出单元格不能包含文本。

是否可能有一行包含与表其余列的类型完全不同的类型?

另一种解决方案可能是让文本框位于网格上方,与列的添加、删除、调整大小和用户滚动同步,但这似乎是一项巨大的工作量,而且了解 WinForms 我可能会在这种方法中发现 3 天由于某些微妙的 WinForms 限制而失败。

不可能的解决方案 - 使用 WPF,使用第 3 方 DataGridView(除非,也许,具有商业使用许可的 OSS DGV)。

目前看来最好的解决方案可能是将所有数据作为字符串导入到数据库数据表中(过滤器下面的数据是只读的)。然而,这似乎非常骇人听闻。

我是否遗漏了一些简单明了的东西?如果它给我一些前进的道路,我很高兴被证明是错误的! :-)

最佳答案

我过去做过这个,它实际上是一个非常有趣的项目。思路基本上是继承DataGridViewColumnHeaderCell基类,自己画。我会花很多时间来解释所涉及的一切,但微软的一篇非常棒的文章让我开始了。我没有完全按照他们的方式去做,但这让我走上了正确的道路。

http://msdn.microsoft.com/en-us/library/aa480727.aspx

另外,您应该考虑的是 DataTable 上有一个 DataView 类型的 DataView 属性。它有一个 RowFilter 属性,您可以使用它来过滤掉行。根本不需要两个 DataTable。这是一篇关于如何使用 RowFilter 属性的好文章:

http://msdn.microsoft.com/en-us/library/system.data.dataview.rowfilter.aspx

关于c# - 使用在列上方可见的过滤器过滤每列的 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1334823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com