可能是我智力愚钝呀,不要笑话,帮助文件 全文 我已经阅读了2遍了,
DrawCell
在绘制单元格的时候执行,主要用于标记数据。
e参数属性:
Table: 准备绘制的表
Row: 准备绘制的行
Col: 准备绘制的列
Style:指定自定义样式的名称,如果用默认的样式绘制单元格,无须设置Style属性。
Text: 字符型,获得或者设置要绘制的文本内容
因为DrawCell事件执行非常频繁,所以代码必须简洁,不可以有太耗时的复杂代码,也不能有显示对话框的代码,否则会出现死循环,切记切记。
示例一
对于数据管理来说,标出异常或特殊的数据也是一项经常性的工作,Foxtable并没有单独设置单元格颜色的方法,那么如何来标记呢?
假定我们一个学生成绩表中,需要用红色背景标出60分以下的分数,用绿色背景标出95分以上的分数。
首先在菜单的数据表功能区,执行自定义样式命令:

然后增加两个样式,分别是优秀和不及格,前者的背景颜色设为绿色,后者的背景颜色设为红色。

最后在DrawCell事件中设置如下代码:
'如果是数值型列,且不是总分列
If e.Col.IsNumeric AndAlso e.Col.Name <> "总分" Then
If e.Row.IsNull(e.Col.Name) = False '且该列已经输入内容
If e.Row(e.Col.Name) < 60 Then '如果该列的值小于60
e.Style = "不及格" '那么用"不及格"样式绘制单元格
ElseIf e.Row(e.Col.Name) > 95 Then '如果单元格的值大于95
e.Style = "优秀" '那么用"优秀"样式绘制单元格
End If
End If
End If
现在程序将用不同的背景颜色,分别标出优秀和不及格的分数:

提示,自定义样式不仅可以通过菜单添加,也可以通过代码添加,请参考:AddUserStyle
示例二
有的时候,不是标记一个单元格,而是希望整行用不同的颜色标记出来,那么代码更加简单。
例如希望总分低于360分的行,用红底白字标出,只需首先增加一个名为“不及格”的样式,将其设置为红字白字,然后将DrawCell事件代码设置为:
If
e.Row("总分") < 360 Then
e.Style = "不及格"
End If
示例三
DrawCell事件不仅用于标记数据,还可以用他“篡改”数据。
假定有一名为“密码”的列,要求只有经理级别的用户才能查看该列的数据,其他人查看的时候,看到的只是"****"。
实现的代码也非常简单,在该表的DrawCell事件中输入:
If
User.Group = "经理" Then '如果是经理
Return '那么返回,正常显示数据
End If
If e.Col.Name = "密码" Then '如果正在绘制的是密码列
e.Text = "****" '那么用*代替原来的内容
End IF
DrawCell事件只是影响显示内容,并不会对真实的值有任何影响。
示例四
DrawCell事件使用自定义样式来标记单元格。
每个DataTable都有Styles集合,用于获得指定名称的自定义样式,例如:
DataTables("成绩表").Styles("不及格")
表示成绩表的不及格样式。
样式包括以下属性:
BackColor: 背景颜色
ForeColor: 字体颜色
FontBold: 逻辑型,设为True,字体加粗
FontItalic:逻辑型,设为True,字体倾斜
FontStrikeout:逻辑型,设为True,字体带删除线
FontUnderline:逻辑型,设为True,字体带下划线
例如对于不及格的成绩,不仅要求用红色标记出来,而且希望能够不停地闪烁,实现的步骤为:
1、增加一个名为“不及格”的自定义样式,样式的背景颜色设为红色。
2、将DrawCell事件的代码设为:
'如果是数值型列,且不是总分列
If e.Col.IsNumeric AndAlso e.Col.Name <> "总分" Then
If e.Row.IsNull(e.Col.Name) = False '且该列已经输入内容
If e.Row(e.Col.Name) < 60 Then '如果该列的值小于60
e.Style = "不及格" '那么用"不及格"样式绘制单元格
End If
End If
End If
3、在计划管理(位于数据库功能区)中增加一个计划,时间间隔设为1000,代码设为
With DataTables(
"成绩表").Styles("不及格")
If .BackColor = Color.Red Then
.BackColor = Color.White
Else
.BackColor = Color.Red
End If
End With