Foxtable(狐表)用户栏目专家坐堂 → Afterfilter 事件问题


  共有4044人关注过本帖树形打印复制链接

主题:Afterfilter 事件问题

帅哥哟,离线,有人找我吗?
edisontsui
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
Afterfilter 事件问题  发帖心情 Post By:2019/5/4 8:11: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


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

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/5/4 12:49:00 [显示全部帖子]


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By: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列的内容)。
输入字符串的格式不正确。

请教为什么?谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/5/4 17:09:00 [显示全部帖子]

按照你的代码,会出现如下警告:

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


 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By: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

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

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/5/6 10:49:00 [显示全部帖子]

9楼所示代码里面,我希望将“总金额”这列的小数位数固定在2位,那我该怎样使用数据类型 decimals 来达到这个目的?
另外,我希望数据类的数据能够靠右(而不是靠左),上述代码要如何写?谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/5/6 17:22:00 [显示全部帖子]

Tables("挤出车间日薪记录").Cols("日").TextAlign = TextAlignEnum.Center  
上面一句,执行结果无效(数据列还是不会置中)。

Tables("挤出车间日薪记录").Cols("总数量").SetFormat("0.00") 
上面一句,执行结果出现警告:Setformat 不是 col 的成员

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/5/6 17:42:00 [显示全部帖子]

不好意思,置中、置左、置右的问题我解决了。还剩数字格式化的问题没有解决。

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2019/7/2 10:39:00 [显示全部帖子]

If User.Group = "行政" Or User.name = "开发者" Or User.Group = "仓库" Or User.Group = "销售" 
    If CurrentTable.name.contains("销售单") 
        Dim b As New GroupTableBuilder("接头巴销售单未交货",DataTables("销售单"))
        b.Groups.Clear()
        b.Filter = Tables("销售单").Filter
        b.Groups.AddDef("客户简称")
        b.Groups.AddDef("产品代号")
        b.Groups.AddDef("产品名称")
        b.Totals.AddDef("销售数量")
        b.Totals.AddDef("交货数量")
        b.Totals.AddDef("退货数量")
        b.Totals.AddDef("未交货数量")
        b.Build
        MainTable = Tables("接头巴销售单未交货")
    End If
End If

If CurrentTable.name.contains("接头巴销售单未交货") 
    Tables("接头巴销售单未交货").Cols(0).TextAlign = TextAlignEnum.Center
'    DataTables("接头巴销售单未交货").deletefor("未交货数量 = 0") '2019/7/2取消此行
'    Tables("接头巴销售单未交货").Cols(1).TextAlign = TextAlignEnum.Center

     在这里设置:如果"未交货数量 = 0”,那么将这行的"未交货数量”一栏底色设置为黄色,字体为粗体。

End If

以上代码是“菜单设计”里面的一个按钮,我希望设置:如果"未交货数量 = 0”,那么将这行的"未交货数量”一栏底色设置为黄色,字体为粗体。

请教如何写代码。谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1551 积分:10061 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2023/4/25 9:27:00 [显示全部帖子]

    Dim cnt As Integer = tbl.DataTable.GetValues("类别", Tables("直身开料单").filter).count 
    If cnt > 1 Then
        messagebox.show("本页面存在 " & cnt & " 个不同的类别-IL和黄龙, 请只筛选一个类别-IL或者HL-之后才能运作此程序!")
    Else
        Dim ty3 As String = DataTables("直身开料单").GetComboListString("类别",Tables("直身开料单").filter)
        b.Groups.Clear()
        b.Filter = Tables("直身开料单").Filter
        b.Groups.AddDef("生产piao号")
        ... ...
        b.Totals.AddDef("单弧")
        ... ...
        b.Build
    End If

上面是 afterfilter 里面的代码,我希望是,当 cnt > 1 时,就不要执行红色部分的代码。但是实际执行结果是,当 cnt > 1 时,messagebox 里面的提示会展示出来,而后面红色的代码也还是会执行。请问要怎样修改代码呢?谢谢。

 回到顶部
总数 13 1 2 下一页