零值的处理
假定某个表的金额列,由单价、数量、折扣三列计算得出,可以将该表的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了。