datagridview 数据库绑定,创建绑定datagridview控件的数据源

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些
  • 关系型数据库与非关系型数据库简介一样吗,关系型数据库非关系型数据库有哪些,关系型数据库与非关系型数据库简介
  • 关于redis数据库入门详细介绍图片,redis数据库的使用,关于Redis数据库入门详细介绍
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 什么是分库分表,为什么要进行分库分表-,分库分表的区别,数据库分库分表是什么,什么情况下需要用分库分表
  • vb中adodb连接数据库,
  • treeview控件绑定数据,wpf treeview数据绑定,详解TreeView绑定数据库
  • sql的多表查询,数据库如何实现多表查询
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库
  • SQL数据库的图形管理界面工具是,sql图形界面创建数据库,SQLServer2019 数据库的基本使用之图形化界面操作的实现
  • sql数据库定时备份怎么弄,mysql 定期备份
  • sql数据库定时备份怎么弄,mysql 定期备份,MySQL 数据库定时备份的几种方式(全面)
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar
  • sqlserver的nvarchar和varchar,数据库varchar和nvarchar,SQL中varchar和nvarchar的基本介绍及其区别
  • 留言与评论(共有 条评论)
       
    验证码: