winform代码分析object数据库

做这部分功能的时候,上网搜索了很多资料,发现很少涉及到这方面的解决方案,找了相关的问题帖子,很多人都叫使用视图去处理,当然,用视图是可以解决这个问题,但是,这么多个表,都用视图去搞,那还得做这么多个视图...........这肯定不科学了。还有如果用视图去做,那么数据实体就与实际的表不一致了,所以,我们需要找到一个解决DataGridView的某个列需要按照某个字典的数据去展现数据。
我们在页面上显示这种字典数据的控件叫ComboBox,同样的,我们发现DataGridView中也可以把某列设置成ComboBox这样的方式,也就是DataGridViewComboBoxColumn列。下面是我实现DataGridView中的某列按照字典数据去展现数据的代码:

[csharp] view plaincopy

  1. dtInfo = new DataGridViewComboBoxColumn();
  2. DataGridViewComboBoxColumn cbColumn = dtInfo as DataGridViewComboBoxColumn;
  3. cbColumn.DataSource= curDictionary.Details;
  4. cbColumn.DisplayMember = "DetailName";
  5. cbColumn.ValueMember = "DetailTagValue";

代码分析说明:创建DataGridViewComboBoxColumn列cbColumn,然后对该列设置字典数据源:cbColumn.DataSource= curDictionary.Details;,然后设置展现值的属性:cbColumn.DisplayMember = "DetailName";(把数据源中的DetailName信息显示在DataGridView中),设置显示值所对应的保存在数据库中的值:cbColumn.ValueMember = "DetailTagValue";这部分的代码与ComboBox控件的原理是一样的,因此,在DataGridView控件中显示字典数据与ComboBox显示字典数据的原理是一样的,难度并不大。
上面所描述的,仅仅是如何在DataGridView中展现字典数据,我们在做数据字典时往往还存在另外一个问题:那就是数据类型的问题,字典表通常为了适应更多的字典数据,一般情况下,我们的DetailTagValue是设置成字符串,但用到该字典数据的表,很多时候不是字符串的,是整形的值,在这时候,DataGridView就会报错,那是因为DetailTagValue的数据类型与DataGridView中对应的列的字段类型不一样引起的,为了解决这个问题,我们需要把DetailTagValue的值设置成object类型,下面我们看下DetailTagValue属性是怎么处理的:

[csharp] view plaincopy

  1. /// <summary>DetailTagValue:属性标签值(保存在数据库中的值)</summary>
  2. public virtual object DetailTagValue
  3. {
  4. get { return pgConvert.GetObjectValueByDbType(dataType, detailTagValue); }
  5. set { detailTagValue = value; }
  6. }

赋值是直接赋值,获取值的时候,根据字段的类型来转换成目标对象的类型。这样转换后就不存在数据类型不匹配而引起的错误了。

WinForm中的DataGridView控件显示数据字典方案2的更多相关文章

  1. winform中的Datagridview控件与List同步修改

    Winform的datagridview是个很强大的控件,可用datatable, List等型的数据与之绑定显示. 可惜的是,绑定的LIst不能同步更新. 估计是为了改进List不能同步更新的问题, ...

  2. C# winform中的datagridview控件标头加入checkbox,实现全选功能。

    /// <summary> /// 给DataGridView添加全选 /// </summary> public class AddCheckBoxToDataGridVie ...

  3. ADO.NET之使用DataGridView控件显示从服务器上获取的数据

    今天回顾下ADO.NET中关于使用DataGridiew控件显示数据的相关知识 理论整理: 使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据. SqlDataAd ...

  4. C#在WinForm中重写ProgressBar控件(带%的显示)

    废话少说,直接上码: namespace csPublish { [ToolboxItem(true)] class textProgressBar : System.Windows.Forms.Pr ...

  5. Winform中修改WebBrowser控件User-Agent的方法(已经测试成功)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  6. WPF中嵌入WinForm中的webbrowser控件

    原文:WPF中嵌入WinForm中的webbrowser控件 使用VS2008创建WPF应用程序,需使用webbrowser.从工具箱中添加WPF组件中的webbrowser发现其中有很多属性事件不能 ...

  7. winform中的dateTimePicker控件设置默认值为空

    winform中的dateTimePicker控件设置默认值为空   第一步:设置Format的属性值为“Custom” 第二步:设置CustomFormat的属性值为空,需要按一个空格键

  8. WinForm开发(1)——DataGridView控件(1)——C# DataGridView控件用法介绍

    DataGridView控件在实际应用中非常实用,特别需要表格显示数据时.可以静态绑定数据源,这样就自动为DataGridView控件添加相应的行.假如需要动态为DataGridView控件添加新行, ...

  9. Winform中使用printDocument控件打印pictureBox中的二维码照片

    场景 Winform中使用zxing和Graphics实现自定义绘制二维码布局: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

随机推荐

  1. C#委托的介绍(delegate、Action、Func、predicate)【转】

    转自 http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1 ...

  2. POJ 3253 Fence Repair【二叉堆】

    题意:给出n根木板,需要把它们连接起来,每一次连接的花费是他们的长度之和,问最少需要多少钱. 和上一题果子合并一样,只不过这一题用long long 学习的手写二叉堆的代码,再好好理解= = #inc ...

  3. C语言深入学习系列 - 字节对齐&内存管理

    用C语言写程序时需要知道是大端模式还是小端模式. 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中:所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高 ...

  4. 基于RTP的H264视频数据打包解包类

    from:http://blog.csdn.net/dengzikun/article/details/5807694 最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打 ...

  5. 锋利的jQuery读书笔记---jQuery中动画

    jQuery中的动画: 1.show和hide 2.fadeIn和fadeOut 3.slideUp和slideDown <!DOCTYPE html> <html> < ...

  6. java web 学习十四(JSP原理)

    一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...

  7. codeforces 700B Connecting Universities 贪心dfs

    分析:这个题一眼看上去很难,但是正着做不行,我们换个角度:考虑每条边的贡献 因为是一棵树,所以一条边把树分成两个集合,假如左边有x个学校,右边有y个学校 贪心地想,让每条边在学校的路径上最多,所以贡献 ...

  8. T-SQL 常用语句学习

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server ---  ...

  9. EF6 Database First (DbContext) - Change Schema at runtime

    Problem:There are two SQL databases (dev and live) with on Azure which has identical table structure ...

  10. JS单例设计模式

     单例,指的是只有一个实例的对象.    在应用单例模式时,生成单例的类必须保证只有一个实例的存在,很多时候整个系统只需要拥有一个全局对象,才有利于协调系统整体的行为.比如在整个系统的配置文件中,配置 ...