linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘网络学院网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > asp.net >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·NetBPM工作流的一个示例:请假
·Office Web Components(OWC)绘
·asp.net正则表达式语法
·asp.net 2.0 ajax中使用PopupC
·Ado.Net读取Excel常见问题总结
·数据源为空时如何让GridView显
·如何让UpdatePanel支持文件上传
·C#.Net的常见面试试题和参考答
·asp.net ajax客户端编程+jquer
·Brettle.Web.NeatUpload.dll支
·ASP.NET使用Cookie
·ASP.NET DEMO 15: 同时支持行单
·如何使IE的后退按钮无效
·如何在ASP.NET中用OWC绘制图表
·asp.net:正确判断当前用户角色
最新文章
·Ajax Control Toolkit Animati
·讨论一下类似BlogEngine内一次
·使用CSS+SiteMap+UserControl+
·Asp.net中多彩下拉框的实现
·浅谈ASP.NET的Postback
·分清ASP.NET AJAX中的Extender
·Tip:在使用AjaxControlTookit
·有关注册DataItem的一些可能被
·IIRF(Ionic's Isapi Rewrite
·asp.net 客户端回调功能的实现
·关于控件部分的看法--读Progra
·为什么在vista上做开发
·如何封装JS和CSS文件为服务器端
·岂今我看过的最强的排序算法
·设计模式学习笔记之单件模式
Google
 
WinForm Datagrid结构剖析(三)
[ 作者:  加入时间:2007-11-27 17:03:39  来自:Linux联盟收集整理 ]
大家好,很高兴又能和大家见面了,不知道大家对前两篇关于Datagrid结构的文章了解得如何,今天讨论的问题是在它们基础上开展的,因此笔者希望您能看一下前两篇文章以获得必要的概念。 k7VLinux联盟
   k7VLinux联盟
  三、自定义列类 k7VLinux联盟
   k7VLinux联盟
  本节主要是和大家一起讨论一下怎样自建一个列类,并加入到Datagrid中进行使用。在上一节中和大家一起讨论了DataGridTextBoxColumn 类,并在它基础上生成了一个继承自DataGridTextBoxColumn的具有改变cell与行(即一行内的cell的集合)变色能力的 DataGridColoredTextBoxColumn类。要实现创建一个列类,应该很好地再次研究一下DataGridTextBoxColumn 类,并据此相似的创建一个新类,本次示例是要创建一个具有下拉框的列(如图1所示),因此,它应该与DataGridTextBoxColumn类是同级的,也就是说它们应该是从同个父类派生出来的,这样才可以在保证在使用上的相似性与一致性。 k7VLinux联盟
   k7VLinux联盟
   k7VLinux联盟
   k7VLinux联盟
   图1 具有下拉框列的Datagrid k7VLinux联盟
   k7VLinux联盟
  1. 何时会用到下拉框? k7VLinux联盟
   k7VLinux联盟
  什么时候会用到下拉框列,一般来说,是当要在cell 中填的内容是确知的几种可能之一时才会使用。那么数据源可能就会来自于两张数据表,一张是Datagrid整体体现的数据表,另一张是记录下拉框列表内容的。(当然,下拉框列表内容也可以不存放于数据库中,只是为了统一管理,笔者习惯于这么做)。在本例中,Datagrid的数据源为: k7VLinux联盟
   k7VLinux联盟
   k7VLinux联盟
   k7VLinux联盟
   图2 Datagrid数据源 k7VLinux联盟
   k7VLinux联盟
  其中,“客户”表是Datagrid整体显示出来的内容的源表,由于“国家”列中所填的是确认的几个国家,因此笔者用“国家”表来记录在下拉框列表中显示出来的供用户选择的国家名。 k7VLinux联盟
   k7VLinux联盟
  2. 下拉框列的使用过程 k7VLinux联盟
   k7VLinux联盟
  现在来看一下下拉框列的使用过程: k7VLinux联盟
   k7VLinux联盟
   图3 下拉框使用过程演示 k7VLinux联盟
   k7VLinux联盟
  从图3中,我们可以方便的了解到下拉框列的处理过程,在平常状况下,该列中的cell还是以textbox的形式进行显示的,下拉框的出现是被textbox中落入焦点才激发的,而后,该cell就是一个实实在在的下拉框了,当焦点离开该cell后,cell又恢复成一个textbox的模样了。 k7VLinux联盟
   k7VLinux联盟
  3. 类的制作 k7VLinux联盟
   k7VLinux联盟
  正式要开工了,先理一下思路,我们要做些什么事: k7VLinux联盟
   k7VLinux联盟
  (1) 从DataGridTextBoxColumn类的父类DataGridColumnStyle继承一个自定义列类:DataGridComboBoxColumn; k7VLinux联盟
   k7VLinux联盟
  (2) 在列中加入一个ComboBox实例,用于聚焦后的出现,与DataGridTextBoxColumn类使用的textbox所属的DataGridTextBox类相似的,我们应该设计一个专用的combobox类提供给DataGridComboBoxColumn类使用。 k7VLinux联盟
   k7VLinux联盟
  (3) 跟踪cell的状态,当聚焦时在textbox的外面添加一个combobox,失去焦点后隐藏起combobox,恢复成textbox; k7VLinux联盟
   k7VLinux联盟
  (4) 重写父类的Edit 与Paint方法,以适应Combobox的使用(关于Paint问题的具体讨论请见上一节)在Edit中将Combobox中产生的(用户输入或在下拉框中选择)变化记录入cell中,这也便于在更改后更新到相关的数据源中去,在本例中,笔者主要是示例实现下拉框与数据源的绑定功能,因此不支持用户输入,反而关注Combobox的DisplayMember与ValueMember属性,用于体现和数据源的关系。这点需要读者注意,如果您希望同时实现用户输入(这倒不是Combobox的优点了,对吧?)需要对笔者的代码进行适当的修改。 k7VLinux联盟
   k7VLinux联盟
  类的代码与使用方法请见“(三)类代码”与“(三)使用代码”两篇文章。 k7VLinux联盟
   k7VLinux联盟
  本节只是从概念角度描述了新建一个列的思路与所需要进行的工作。Datagrid 结构剖析也即将告一段落,本系列旨在抛砖引玉,希望给大家一点有益的启发,有利于学习与工作。接下来,笔者会和大家一起讨论Datagrid的事件响应机制与方法,以及与数据库连接的高级应用。大家也可以写信给我,告知您对于Datagrid关心的内容,笔者会选择问题较集中的方面与大家进行新的讨论。祝大家学习进步,事业有成! k7VLinux联盟
   k7VLinux联盟
  ---- k7VLinux联盟
   k7VLinux联盟
    声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。 k7VLinux联盟
   k7VLinux联盟
  QQ: 18349592 k7VLinux联盟
   k7VLinux联盟
  E-Mail: henry7685@hotmail.com k7VLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·WinForm Datagrid结构剖析(三)类代码  (2007-11-27 17:02:48)
 ·WinForm Datagrid结构剖析(三)使用代码  (2007-11-27 17:01:15)