以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  Afterfilter 事件问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=134691)

--  作者:edisontsui
--  发布时间:2019/5/4 8:11:00
--  Afterfilter 事件问题
    Dim b2 As New CrossTableBuilder("挤出车间日薪记录",DataTables("日薪计算"))
    b2.hGroups.Clear()
    b2.vGroups.Clear()
    b2.Filter = Tables("日薪计算").Filter
    b2.HGroups.AddDef("生产日期",DateGroupEnum.Day,"日")
    b2.HGroups.AddDef("零件代号")
    b2.HGroups.AddDef("零件名称")
    b2.hgroups.AddDef("总数量")
    b2.hgroups.AddDef("单价")  
    b2.hgroups.AddDef("总金额") 
    b2.hgroups.AddDef("合作人数") 
    b2.VGroups.AddDef("姓名") 
    b2.Totals.AddDef("小时数")
    b2.Totals.AddDef("个人占比")
    b2.Totals.AddDef("计件工资")
    b2.Totals.AddDef("餐补")
    b2.OrderByTotal = True
    b2.VerticalTotal = True 
    b2.Build


上面的代码是在 Afterfilter 里面的。我希望的结果是:凡是“小时数”是0的,就不要显示0出来,那个单元格显示空格就可以了。请教要怎样写代码?谢谢。

--  作者:有点甜
--  发布时间:2019/5/4 9:13:00
--  

 

生成报表以后,循环每一行,循环每一列,如果值是0的,改值为nothing,即可。

 

 


--  作者:edisontsui
--  发布时间:2019/5/4 12:49:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:标题名.jpg
图片点击可在新窗口打开查看

像上面这种通过 Crosstablebuilder 形成的标题名应该是怎样的才对,我试过“产品PD01”、“产品.PD01”、"PD01产品"、“产品”都不行,运行代码都会说:列“......”不属于表 ...。

--  作者:有点甜
--  发布时间:2019/5/4 15:33:00
--  

你查看表结构,看看列名是什么

 

http://www.foxtable.com/webhelp/scr/0193.htm

 


--  作者:edisontsui
--  发布时间:2019/5/4 15:36:00
--  
For c As Integer = 7 To Tables("挤出车间日薪记录").Cols.Count -1 
    For r As Integer = 0 To Tables("挤出车间日薪记录").Rows.Count -1
    Dim dr As Row = Tables("挤出车间日薪记录").Rows(r)
        If dr(r) = 0
            dr(r) = ""
        Else
            dr(r) = dr(r)
        End If 
    Next
Next

上述代码我希望从第8列开始将值为0的转换为空格。但是,会出现如下警告:

从字符串“SP-BAKELITE”到类型“Double”的转换无效(备注:SP-BAKELITE是第2列的内容)。
输入字符串的格式不正确。

请教为什么?谢谢。

--  作者:有点甜
--  发布时间:2019/5/4 15:40:00
--  
For c As Integer = 7 To Tables("挤出车间日薪记录").Cols.Count -1
    For r As Integer = 0 To Tables("挤出车间日薪记录").Rows.Count -1
        Dim dr As Row = Tables("挤出车间日薪记录").Rows(r)
        If dr(r) = "0" Then
            dr(r) = Nothing
        End If
    Next
Next

--  作者:edisontsui
--  发布时间:2019/5/4 17:09:00
--  
按照你的代码,会出现如下警告:

.NET Framework 版本:2.0.50727.8793
Foxtable 版本:2017.3.18.1
错误所在事件:日薪计算,AfterFilter
详细错误信息:
索引超出范围。必须为非负值并小于集合大小。
参数名: index


--  作者:有点甜
--  发布时间:2019/5/4 17:28:00
--  
For c As Integer = 7 To Tables("挤出车间日薪记录").Cols.Count -1
    For r As Integer = 0 To Tables("挤出车间日薪记录").Rows.Count -1
        Dim dr As Row = Tables("挤出车间日薪记录").Rows(r)
        If dr(c) = "0" Then
            dr(c) = Nothing
        End If
    Next
Next

--  作者:edisontsui
--  发布时间:2019/5/5 8:05:00
--  
    Dim b2 As New CrossTableBuilder("挤出车间日薪记录",DataTables("日薪计算"))
    b2.hGroups.Clear()
    b2.vGroups.Clear()
    b2.Filter = Tables("日薪计算").Filter
    b2.HGroups.AddDef("生产日期",DateGroupEnum.Day,"日")
    b2.HGroups.AddDef("零件代号")
    b2.HGroups.AddDef("零件名称")
    b2.hgroups.AddDef("总数量")
    b2.hgroups.AddDef("单价")  
    b2.hgroups.AddDef("总金额") 
    b2.hgroups.AddDef("合作人数") 
    b2.VGroups.AddDef("姓名") 
    b2.Totals.AddDef("小时数")
    b2.Totals.AddDef("个人占比")
    b2.Totals.AddDef("计件工资")
    b2.Totals.AddDef("餐补")
    b2.OrderByTotal = True
    b2.VerticalTotal = True 
    b2.Build

谢谢。还有一个问题:如上代码,只有小时数、个人占比、计件工资和餐补可以实现垂直相加,而我希望“总数量”也能够实现垂直相加。如何修改代码?

--  作者:有点甜
--  发布时间:2019/5/5 9:25:00
--  

自己设置合计模式

 

http://www.foxtable.com/webhelp/scr/2748.htm

 

http://www.foxtable.com/webhelp/scr/2750.htm