WinForm Datagrid结构剖析(二)

时间:2010-03-15 12:19:01  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:是Datagrid的基础结构,对于一般的问题应付起来已经是够了,但遇上一些特别的需求,比如说想让一个cell变色,想在Datagrid中加入一个自定义的控件列(比如ComboBox),就需要对上节的内容进行活用了。今天我们先来谈谈如何将某个cell,或某行的前景与背景色进行变化,借以让大家熟练掌握到Datagrid的操作。            ...
  正文: 继上一篇发表已有数日了,实在是因为太忙,无暇写继篇。却不断收到网友的鼓励与询问,不得不忘却近日的疲惫,匆匆上阵,希望不会让大家太失望。
  
  二、自定义功能
  
  上一节讲的是Datagrid的基础结构,对于一般的问题应付起来已经是够了,但遇上一些特别的需求,比如说想让一个cell变色,想在Datagrid中加入一个自定义的控件列(比如ComboBox),就需要对上节的内容进行活用了。今天我们先来谈谈如何将某个cell,或某行的前景与背景色进行变化,借以让大家熟练掌握到Datagrid的操作。
  
  
  
  图1
  
  
  
   图1 变色示例图
  
  
  
  在图1中,我使三个cell的前景与背景色都发生了变化,但它们的激发机制是不一样的,“美国”、“中国”两个cell我是用指定cell位置的方式使其变色的,而“3”这个cell是我在数据源中进行判断找到大于2的那个cell并使其变色,从而得到的。下文将对它们进行详述。
  
  1. cell的屏显工作步骤
  
  在第一节中,我给大家展示了Datagrid的结构,其中提到,Datagrid中是由DataGridTableStyle来决定它的外观,DataGridTableStyle是由DataGridColumnStyle来组成的,默认的DataGridColumnStyle就是一个文本框列,背景色为白,前景色为黑色,这就是我们面前的作料了。我们就要想办法进行调整,调整的另一个前提就是工续了,它到底支不支持对cell的调色呢?
  
  还记得我在上节列出的代码吗?(如果不记得,请打开原文对照着看一下),我在重绘Datagrid以获得列头、列宽的改变时,用的是:
  
  Dim aColumnTextColumn As DataGridTextBoxColumn '决定每一列的样式
  
  它就是我所说的默认列样式了。想要进行改变其外观的整容手术,就不得不进行外科手术了。请戴上手套,执起快刀,我们开始解剖DataGridTextBoxColumn类了。
  
  该类的作用就是:在 DataGridColumnStyle 的单元格中承载 TextBox 控件以便编辑字符串。
  
  我们在第一节中使用的是其几个属性:HeadText和MappingName等等。它们都是对现有类的应用,对我们今天的工作没有太大帮助。我们今天要看看该类是如何能显示出用户输入或载入的文字的。这就必须了解其“受保护的方法”的工作了。
  
  在您更改了DataGridTextBoxColumn类的一个实例aColumnTextColumn 的属性后,会使用下面这句:
  
  ts.GridColumnStyles.Add(aColumnTextColumn) 来向Datagrid的TableStyle(ts)中的GridColumnStyle添加一个aColumnTextColumn,继而可以使用DataGridTextBoxColumn类的属性与方法。
  
  而显示的步骤无非是如下四步:
  
  a. 获得要显示于Datagrid中的位置
  
  b. 获得要显示在该位置上的数据
  
  c. 获得要显示时使用的Textbox的属性
  
  d. 开始向屏幕绘图
  
  前两步无可厚非,我们不需要改变什么,在该类中,如果Datagrid与某数据源进行了绑定,是使用GetColumnValueAtRow方法来从指定的数据源的指定位置取出数据,(在Datagrid中的数据被用户实时编辑发生更改后,用SetColumnValueAtRow方法向数据源回传值,用以保持数据的同步)。如果是用户实时的输入数据,则使用Edit方法将实时的数据传递到cell中去。
  
  然后调用Paint方法记录绘制列的参数,最后通过PaintText去进行列中的cell的绘制。这里稍说明一下,Paint是受系统自动控制与调用的,在Datagrid显示在屏幕的过程中当Datagrid外观发生外部的变化时(比如被另一个窗体遮盖后又移开),会自动调用运行,用以维护其外观。
  
  看,并不复杂嘛,那我们如何进行改变呢?当然是想办法在Paint与PaintText进行交互的时候加入我们自己的代码,来个“狸猫换太子”。
  
  2. 变更工作思路
  
  所以我们要做的工作就相应成为:
  
  a. 重载Paint方法
  
  b. 实现Paint要完成的工作,包括获得要显示的字符,textbox的属性(这就是工作的重点)
   《WinForm Datagrid结构剖析(二)》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13232.html


关键字:

关于《WinForm Datagrid结构剖析(二)》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td