DrawCell

在绘制单元格的时候执行,主要用于标记数据。
 
e参数属性:

Table:     准备绘制的表
Row:       准备绘制的行
Col:       准备绘制的列
Style:    指定自定义样式的名称,如果用默认的样式绘制单元格,无须设置Style属性。
Text:     字符型,获得或者设置要绘制的文本内容
Chart:    单元格图表
DrawChart:绘制单元格图表,参考:单元格图表 添加图表数据 使用线状图 使用柱状图 使用胜负图 几个示例 图表属性设置 单元格图表交互

因为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事件,这一点和常规的表事件有所不同。
例如在汇总模式下,对于数量小计超出一定值的汇总结果进行标记:

If e.Row.IsGroup AndAlso e.Col.Name = "数量" Then '如果是分组行的数量列
    If e.Row.Level = 0 Then '如果是1级分组
        If e.Row("数量") > 5000 Then
            e.Style = "样式1"
        End If
    ElseIf e.Row.Level = 1 Then '如果是二级分组
        If e.Row("数量") > 1000 Then
            e.Style = "样式2"
        End If
    End If       

End
If

示例五

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


本页地址:http://www.foxtable.com/webhelp/topics/0656.htm