零值的处理

假定某个表的金额列,由单价、数量、折扣三列计算得出,可以将该表的DataColChanged事件代码设置为:

Dim dr As DataRow = e.DataRow
Select
Case e.DataCol.Name
   
Case "数量","单价","折扣"
        dr(
"金额") = dr("数量") * dr("单价") * (1 - dr("折扣"))
End Select

显然如果我们只输入数量、单价中的一个,金额列的计算结果等于0。
即使我们没有输入数量、单价、折扣中的任何一个值,如果重置其中某一列,金额列的内容同样也会等于0。

如果你希望只有同时输入了单价和数量的情况下,才计算金额,避免金额出现0值,可以将DataColChanged事件代码改为:

Dim dr As DataRow = e.DataRow
Select
Case e.DataCol.Name
   
Case "数量","单价","折扣"
       
If dr.IsNull("数量") OrElse dr.IsNull("单价") Then
            dr(
"金额") = Nothing
        Else

            dr(
"金额") = dr("数量") * dr("单价") * (1 - dr("折扣"))
       
End If
End
Select

这样如果数量或者单价中任何一个为空,金额也会自动清空,而不会出现0值。

如果你希望在任何情况下,某一列都不能出现0值,那么代码会更简单,同样用金额列为例,只需将DataColChanging事件代码设为:

If e.DataCol.Name = "金额" Then
    If
e.NewValue = 0 Then
        e.NewValue =
Nothing
    End
if
End
If

注意上面的代码设置在DataColChanging事件中,而不是DataColChanged事件中。这样可以在金额列的值发生变化之前进行拦截干预,判断新的值是否为0,如果为0,则将新值设为Nothing,这样金额列的值就永远不可能为0了。

如果你希望表中所有的数据列,都不能出现零值,可以将DataColChanging事件代码设为:

If e.DataCol.IsNumeric Then
    If
e.NewValue = 0 Then
        e.NewValue =
Nothing
    End
if
End
If


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