Henry手记:WinForm Datagrid结构剖析(三)

原创 2002年12月18日 08:50:00

               Henry手记— WinForm Datagrid结构剖析(三)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

                           韩睿 2002-12-18

 

大家好,很高兴又能和大家见面了,不知道大家对前两篇关于Datagrid结构的文章了解得如何,今天讨论的问题是在它们基础上开展的,因此笔者希望您能看一下前两篇文章以获得必要的概念。

三、自定义列类

本节主要是和大家一起讨论一下怎样自建一个列类,并加入到Datagrid中进行使用。在上一节中和大家一起讨论了DataGridTextBoxColumn类,并在它基础上生成了一个继承自DataGridTextBoxColumn的具有改变cell与行(即一行内的cell的集合)变色能力的DataGridColoredTextBoxColumn类。要实现创建一个列类,应该很好地再次研究一下DataGridTextBoxColumn类,并据此相似的创建一个新类,本次示例是要创建一个具有下拉框的列(如图1所示),因此,它应该与DataGridTextBoxColumn类是同级的,也就是说它们应该是从同个父类派生出来的,这样才可以在保证在使用上的相似性与一致性。

 

                            图1  具有下拉框列的Datagrid

1.      何时会用到下拉框?

什么时候会用到下拉框列,一般来说,是当要在cell中填的内容是确知的几种可能之一时才会使用。那么数据源可能就会来自于两张数据表,一张是Datagrid整体体现的数据表,另一张是记录下拉框列表内容的。(当然,下拉框列表内容也可以不存放于数据库中,只是为了统一管理,笔者习惯于这么做)。在本例中,Datagrid的数据源为:

 

                            图2  Datagrid数据源

其中,“客户”表是Datagrid整体显示出来的内容的源表,由于“国家”列中所填的是确认的几个国家,因此笔者用“国家”表来记录在下拉框列表中显示出来的供用户选择的国家名。

2.        下拉框列的使用过程

现在来看一下下拉框列的使用过程: 

    图3  下拉框使用过程演示

从图3中,我们可以方便的了解到下拉框列的处理过程,在平常状况下,该列中的cell还是以textbox的形式进行显示的,下拉框的出现是被textbox中落入焦点才激发的,而后,该cell就是一个实实在在的下拉框了,当焦点离开该cell后,cell又恢复成一个textbox的模样了。

3.        类的制作

正式要开工了,先理一下思路,我们要做些什么事:

(1)     DataGridTextBoxColumn类的父类DataGridColumnStyle继承一个自定义列类:DataGridComboBoxColumn;

(2)     在列中加入一个ComboBox实例,用于聚焦后的出现,与DataGridTextBoxColumn类使用的textbox所属的DataGridTextBox类相似的,我们应该设计一个专用的combobox类提供给DataGridComboBoxColumn类使用。

(3)     跟踪cell的状态,当聚焦时在textbox的外面添加一个combobox,失去焦点后隐藏起combobox,恢复成textbox;

(4)     重写父类的Edit与Paint方法,以适应Combobox的使用(关于Paint问题的具体讨论请见上一节)在Edit中将Combobox中产生的(用户输入或在下拉框中选择)变化记录入cell中,这也便于在更改后更新到相关的数据源中去,在本例中,笔者主要是示例实现下拉框与数据源的绑定功能,因此不支持用户输入,反而关注Combobox的DisplayMember与ValueMember属性,用于体现和数据源的关系。这点需要读者注意,如果您希望同时实现用户输入(这倒不是Combobox的优点了,对吧?)需要对笔者的代码进行适当的修改。

类的代码与使用方法请见“(三)类代码”与“(三)使用代码”两篇文章。

本节只是从概念角度描述了新建一个列的思路与所需要进行的工作。Datagrid结构剖析也即将告一段落,本系列旨在抛砖引玉,希望给大家一点有益的启发,有利于学习与工作。接下来,笔者会和大家一起讨论Datagrid的事件响应机制与方法,以及与数据库连接的高级应用。大家也可以写信给我,告知您对于Datagrid关心的内容,笔者会选择问题较集中的方面与大家进行新的讨论。祝大家学习进步,事业有成!

----

  声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。

QQ: 18349592

E-Mail: henry7685@hotmail.com

     请访问本人专栏:http://www.csdn.net/develop/author/netauthor/Latitude/

 

Datagrid添加右键菜单

最近的一个项目前台使用的EasyUI,每个界面都有DataGrid控件,按照我们的想法,应该做出来的效果是单击选中,双击可编辑,当然右键也应该出现这些菜单按钮,首先建一个DataGrid的表格。。。。...
  • u013036688
  • u013036688
  • 2015年08月14日 19:57
  • 1351

[随手记经验] 【转载】其实你不懂记账

这些问题你都能立马回答出来吗?  1、你的资产负债率是多少?  2、你的收支结余比例是多少?  3、上个月结余的钱都放在什么地方了?  4、目前你手上有多少可动用资金?  5、你的股票、基金等投资收益...
  • fishmai
  • fishmai
  • 2016年09月01日 12:58
  • 1044

《IT项目经理成长手记》读后有所思

最近看了一本潘东、韩秋泉先生合著的一本书《IT项目经理成长手记》,虽然与IT项目经理相关的书我看的不多,对于这个行业了解也不算太多,但是我依然认为这是一本很值得想要从事互联网产品、通信行业解决方案管理...
  • u013816144
  • u013816144
  • 2016年06月20日 21:53
  • 3632

winform开发框架常见的分层模式

winform开发框架,常见的分层模式,可以分为UI层、BLL层、DAL层、IDAL层、Entity层、公用类库层等等。 这个分层,在Web项目或者WInform项目(包括WPF项目)这些分层都...
  • hjp1137
  • hjp1137
  • 2015年09月21日 10:27
  • 4066

深入剖析PE文件

 PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一、 基本结构。   上图便是PE文件的...
  • u014563989
  • u014563989
  • 2016年12月09日 16:41
  • 403

金蝶随手记java面经

金蝶随手记java面经 面试的是java开发岗
  • u010841296
  • u010841296
  • 2017年08月04日 20:29
  • 357

python源码分析----对象结构

在python中,所有的东西都是对象,整数是,方法也是,。。总之什么都是。。。。 在看python的代码实现中,可以随处看到指针类型:PyObject*,那么我们就先来看看PyObject这到底是怎么...
  • fjs_cloud
  • fjs_cloud
  • 2015年05月18日 12:51
  • 923

c语言入门(三)分支结构

★一:bool布尔类型 ★二:关系运算符 ★三:逻辑运算符 ★四:if语句 ★五:switch语句 一:bool数据类型: 表示非真即假的数据类型,布尔类型...
  • fublog
  • fublog
  • 2014年07月14日 21:19
  • 371

iOS 支付宝集成随手记

支付宝集成随手记(怕自己忘了再去踩坑) 1.在支付宝平台下载最新的SDK(目前最新15.3.7)https://docs.open.alipay.com/54/104509 2.将下载文件中的下面...
  • foreve9125
  • foreve9125
  • 2017年07月09日 15:57
  • 155

随手记java开发实习生面试

闲话大三暑假学校安排了实训计划,去一些公司体验实习,其实是去培训机构上课。8人一个宿舍,于是自己就开始了海投模式,现在基本弃疗了。。。投了8家,就一家回复了我。。。算了,还是去吧。没错我这次面试又是日...
  • qq_24489717
  • qq_24489717
  • 2017年06月09日 01:15
  • 826
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Henry手记:WinForm Datagrid结构剖析(三)
举报原因:
原因补充:

(最多只允许输入30个字)