以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]让所有数值列不显示零值的通用代码 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=1352) |
-- 作者:t_fs -- 发布时间:2008/12/9 16:18:00 -- [求助]让所有数值列不显示零值的通用代码 由于表中的数据列太多,我设计了一个通用的让所有数值列不显示零值的代码。代码如下: Dim dr As dataRow = e.dataRow For Each dc As Col In Tables("汇总表").Cols If dc.IsNumeric Then \'是否数据列 If dr.IsNull(dc.Name) then \'是否为零 dr(dc.Name)= Nothing \'清零 end if End If Next 我将上述代码放在DataColChanged事件中,点击确认后,没有错误显示。可是当数据更新后,表中仍然存在0.00. 不知道错在那里,请高手再给看看。谢谢! |
-- 作者:狐狸爸爸 -- 发布时间:2008/12/9 16:25:00 -- 关于示例文件的问题 零值的处理 假定某个表的金额列,由单价、数量、折扣三列计算得出,可以将该表的DataColChanged事件代码设置为: Dim dr As DataRow = e.DataRowSelect Case e.DataCol.Name Case "数量","单价","折扣" dr("金额") = dr("数量") * dr("单价") * (1 - dr("折扣")) End Select 显然如果我们只输入数量、单价中的一个,金额列的计算结果等于0。 如果你希望只有同时输入了单价和数量的情况下,才计算金额,避免金额出现0值,可以将DataColChanged事件代码改为: Dim dr As DataRow = e.DataRowSelect 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 = "金额" ThenIf e.NewValue = 0 Then e.NewValue = Nothing End if End If 注意上面的代码设置在DataColChanging事件中,而不是DataColChanged事件中。这样可以在金额列的值发生变化之前进行拦截干预,判断新的值是否为0,如果为0,则将新值设为Nothing,这样金额列的值就永远不可能为0了。 |
-- 作者:狐狸爸爸 -- 发布时间:2008/12/9 16:26:00 -- 根据帮助,可以写出针对所有列的代码: If e.DataCol.IsNumeric Then If e.NewValue = 0 Then e.NewValue = Nothing End if End If 放在DataColChanging事件中 |
-- 作者:t_fs -- 发布时间:2008/12/9 16:40:00 -- 以下是引用狐狸爸爸在2008-12-9 16:26:00的发言:
根据帮助,可以写出针对所有列的代码: If e.DataCol.IsNumeric Then If e.NewValue = 0 Then e.NewValue = Nothing End if End If 放在DataColChanging事件中 非常好用,也非常实用。谢谢了!! |
-- 作者:狐狸爸爸 -- 发布时间:2008/12/9 17:03:00 -- 以下是引用t_fs在2008-12-9 16:40:00的发言:
非常好用,也非常实用。谢谢了!!
[此贴子已经被作者于2008-12-9 17:03:18编辑过]
|
-- 作者:t_fs -- 发布时间:2008/12/9 17:54:00 -- 以下应该是正确的吧?关键是代码的存放位置应放在DataColChanging事件中 if dr(dc.Name)= 0 then dr(dc.Name)= Nothing end if 另外,e.NewValue 这个代码好象以前未出现过,是个暂新的代码。 |
-- 作者:狐狸爸爸 -- 发布时间:2008/12/9 17:55:00 -- 以下是引用t_fs在2008-12-9 17:54:00的发言:
另外,e.NewValue 这个代码好象以前未出现过,是个暂新的代码。
|