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. Asp.Net MVC Filter权限过滤使用说明

    相信对权限过滤大家都不陌生,用户要访问一个页面时,先对其权限进行判断并进行相应的处理动作. mvc中是如何实现权限验证的? mvc中是根据路由配置来请求控制器类中的一个方法 在mvc框架中为程序员提供 ...

  2. 把 HttpHandler.ashx 修改为 异步编程 异步操作

    在 ASP.NET 中,所有的处理程序类必须实现 IHttpHandler 接口或者实现 IHttpAsyncHandler 接口,这两个接口的区别是前者是一个同步接口,后者是一个异步处理模式的接口. ...

  3. RecyclerView 结合 CardView 使用

    准备工作:导入 1.activity_mian.xml <android.support.v7.widget.RecyclerView android:id="@+id/recycle ...

  4. poj 1330 Nearest Common Ancestors(LCA:最近公共祖先)

    多校第七场考了一道lca,那么就挑一道水题学习一下吧= = 最简单暴力的方法:建好树后,输入询问的点u,v,先把u全部的祖先标记掉,然后沿着v->rt(根)的顺序检查,第一个被u标记的点即为u, ...

  5. 完整cocos2d-x编译Andriod应用过程

    作者:何卫 转载请注明,原文链接:http://www.cnblogs.com/hewei2012/p/3366969.html 其他平台移植:http://cocos2d.cocoachina.co ...

  6. Linux busybox mount -a fstab

    /*********************************************************************** * Linux busybox mount -a fs ...

  7. 【转】Windows环境下Android Studio v1.0安装教程

    原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/1 ...

  8. ORACLE RAC 监听配置 (listener.ora tnsnames.ora)

    Oracle RAC 监听器的配置与单实例稍有不同,但原理和实现方法基本上是相同的.在Oracle中 tns进程用于为指定网络地址上的一个或多个Oracle 实例提供服务注册,并响应来自客户端对该服务 ...

  9. HDU 5842 Lweb and String

    Lweb and String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  10. PIG的配置

    Pig是一个客户端应用程序,就算你要在Hadoop集群上运行Pig,也不需要在集群上装额外的东西.Pig的配置非常简单: 1.下载pig,网址http://pig.apache.org/ 2.在机器上 ...