datagridview 数据库绑定,创建绑定datagridview控件的数据源
更新:不建议使用AdvancedDataGridView。与List绑定存在很多问题。建议使用ObjectListView。
文本:
DataGridView组件非常适合与Ado绑定。Net的DataTable,而且网上有很多说明。这篇博客主要关注DataGridView和List数据对象的绑定。
下图显示了各种绑定的组合方案。
==============================
最佳搭配组合
==============================
这里,红色组合是最佳方案,使用BindingList作为数据容器。好处是容器的添加、删除、修改都会直接反映在网格视图层。
但是,对BindingList容器元素进行排序或筛选不会再次刷新网格视图层,因此需要重新绑定。
同时,BindingList容器本身支持排序和过滤会比较麻烦。这时,我们可以利用System的第三方库。Linq.Dynamic,它提供列表。Where(字符串谓项)扩展函数,这与动态拼写SQL where子句的函数非常相似。例如:
var查询=客户。where( City== some value );
==============================
使用DG。AdvancedDataGridView而不是DataGridView。
==============================
AdvancedDataGridView不是的内置类。网。可以通过nuget搜索AdvancedDataGridView的名称。我下载了DG.AdvancedDataGridView。
项目主页在https://github.com/davidegironi/advanceddatagridview.
为什么要用AdvancedDataGridView?因为这个组件提供了类似于Excel行过滤的效果,可以对行进行过滤,对组合进行排序。
AdvancedDataGridView派生自DataGridView组件,提供了许多DataGridView属性和事件,其中有两个事件专门用于组合排序和行筛选,分别是SortStringChanged()和FilterStringChanged()。下面是这两个事件的参数格式:
SortStringChanged()事件中sort事件参数的e.SortString属性的内容类似于:[Name] asc,[Age] desc
FilterString()事件中sort事件参数的e.FilterString属性的内容类似于:
([Name] IN (A str , B str ))和([Age] IN (10,20))
不难看出,AdvancedDataGridView组件似乎是专门为与Ado绑定而设计的。Net的数据表。这样的参数不能很好地支持非数据表数据源,需要一些特殊的处理。
好在github上已经有人给出了完美的解决方案。有关详细信息,请参考以下文件中的SortStringChanged()和FilterStringChanged()函数。
https://github . com/ocean airdrop/advanced datagridview data model/blob/master/advanced datagridview data model/form 1 . cs
在上面的示例中有一些不完美的地方。我还没有找到完美的解决方案,但是有一些规避的方法。
问题1:如果设计时添加的列对应的是int属性,那么AdvancedDataGridView组件弹出的排序菜单仍然是按string排序,而不是按numnber排序。
问题2:设计时添加的列,如果后台对象对应的是int属性,那么AdvancedDataGridView的筛选字符串就无法转换成System支持的筛选表达式。Linq.Dynamic,所以过滤功能不起作用。
解决方法是让AdvancedDataGridView在绑定对象时自动生成所有列,可以解决以上两个问题。
以下是绑定数据对象的主要代码:
此外,您甚至可以在设计时向IDE添加列。毕竟所见即所得的设计更方便。此时,在第一次绑定数据对象之前,将这些列元数据保存到一个列表中,元数据包括width、minwidth、数据属性名、头文本、visible和readonly等信息。
每次数据绑定后,恢复这些列的元数据。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。