Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共7 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:[求助]让所有数值列不显示零值的通用代码

1楼
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.

不知道错在那里,请高手再给看看。谢谢!
2楼
狐狸爸爸 发表于:2008/12/9 16:25:00

零值的处理

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

3楼
狐狸爸爸 发表于:2008/12/9 16:26:00
根据帮助,可以写出针对所有列的代码:

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

放在DataColChanging事件中
4楼
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事件中

       非常好用,也非常实用。谢谢了!!

5楼
狐狸爸爸 发表于:2008/12/9 17:03:00
以下是引用t_fs在2008-12-9 16:40:00的发言:

       非常好用,也非常实用。谢谢了!!


正式版本出来了,建议你重新看一次帮助。
从你一楼写的代码,我可以看出老兄还得补补基本功。

If dr.IsNull(dc.Name) then  
   dr(dc.Name)= Nothing 
end if

要知道,上面的代码没有任何意义的,只是将已经为空的单元格再次设为空值,意义何在呢?

[此贴子已经被作者于2008-12-9 17:03:18编辑过]
6楼
t_fs 发表于:2008/12/9 17:54:00

     以下应该是正确的吧?关键是代码的存放位置应放在DataColChanging事件中

if dr(dc.Name)= 0  then
  dr(dc.Name)= Nothing 
end if

    另外,e.NewValue  这个代码好象以前未出现过,是个暂新的代码。
7楼
狐狸爸爸 发表于:2008/12/9 17:55:00
以下是引用t_fs在2008-12-9 17:54:00的发言:

    另外,e.NewValue  这个代码好象以前未出现过,是个暂新的代码。


这个一直有的,就在帮助中。

共7 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .02734 s, 2 queries.