|
 |
栏目导栏 |
|
| |
|
|
|
|
 |
资料搜索 |
|
| |
|
|
|
|
 |
热门文章 |
|
| |
|
|
|
|
 |
最新文章 |
|
| |
|
|
|
| |
| |
|
|
|
|
大家好,很高兴又能和大家见面了,不知道大家对前两篇关于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论坛讨论 |
|
|
|
|
|