以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  合格率  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=132299)

--  作者:qinlao666
--  发布时间:2019/3/19 12:42:00
--  合格率
Dim b As New CrossTableBuilder("统计表1",DataTables("采购送检"))
b.HGroups.AddDef("送检日期",DateGroupEnum.Year,"年") \'添加日期列用于水平分组,按年分组
b.HGroups.AddDef("供方代码","供方代码") \'添加日期列用于水平分组,按月分组
b.VGroups.AddDef("送检日期","送检日期_{0}月") \'添加产品列用于垂直分组
b.Totals.AddDef("金额") \'添加数量列用于统计
b.Totals.AddDef("交验数量") \'添加数量列用于统计
b.Totals.AddDef("合格数量") \'添加数量列用于统计
b.Totals.AddDef("降用数量") \'添加数量列用于统计
b.Totals.AddDef("报废数量") \'添加数量列用于统计
b.Subtotal = True \'生成汇总模式
b.Build \'生成统计表
MainTable = Tables("统计表1") \'打开生成的统计表

我想在统计表中再增加一列合格率,公式是合格数量/交验数量,
请老师赐教代码,谢谢!

--  作者:有点甜
--  发布时间:2019/3/19 12:45:00
--  

生成统计表后,添加一列,即可

 

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

 


--  作者:qinlao666
--  发布时间:2019/3/19 13:16:00
--  
我需要每月都进行合格率的统计
--  作者:qinlao666
--  发布时间:2019/3/19 13:30:00
--  
请教老师,我这个列名该如何写,测试总是找不到列名
DataTables("统计表1").DataCols.Add("合格率", Gettype(Double), "[合格数量] / [交验数量] ")

--  作者:qinlao666
--  发布时间:2019/3/19 14:08:00
--  
Dim b As New CrossTableBuilder("统计表1",DataTables("采购送检"))
b.HGroups.AddDef("送检日期",DateGroupEnum.Year,"年") \'添加日期列用于水平分组,按年分组
b.HGroups.AddDef("供方代码","供方代码") \'添加日期列用于水平分组,按月分组
b.VGroups.AddDef("送检日期","{0}月") \'添加产品列用于垂直分组
b.Totals.AddDef("金额") \'添加数量列用于统计
b.Totals.AddDef("交验数量") \'添加数量列用于统计
b.Totals.AddDef("合格数量") \'添加数量列用于统计
b.Totals.AddDef("降用数量") \'添加数量列用于统计
b.Totals.AddDef("报废数量") \'添加数量列用于统计
b.Subtotal = True \'生成汇总模式
b.Build \'生成统计表
Dim nms() As String = {"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"}
For Each nm As String In nms 
DataTables("统计表1").DataCols.Add(nm & "_合格率",Gettype(Double), nm & "_合格数量"/ nm & "_ 交验数量"  )
    Tables("统计表1").Cols(nm & "_合格率").Move(Tables("统计表1").Cols(nm & "_报废数量").Index + 1)
Next
MainTable = Tables("统计表1") \'打开生成的统计表

报错    从字符串“_合格数量”到类型“Double”的转换无效。
请老师帮忙修改下代码

--  作者:有点甜
--  发布时间:2019/3/19 14:28:00
--  

1、看你的表结构是什么,列名有可能写错了

 

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

 

2、如果不会做,上传实例测试


--  作者:2900819580
--  发布时间:2019/3/19 14:33:00
--  
以下是引用有点甜在2019/3/19 14:28:00的发言:

1、看你的表结构是什么,列名有可能写错了

 

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

 

2、如果不会做,上传实例测试



此主题相关图片如下:无标题.png
按此在新窗口浏览图片


老师,正好我也也碰到这样的问题,表的名称无法判断,只能从标题看到。 表达式要怎么写。

[此贴子已经被作者于2019/3/19 14:33:27编辑过]

--  作者:有点甜
--  发布时间:2019/3/19 14:44:00
--  

先这样处理

 

Dim dic As new Dictionary(of String, String)
For Each dc As DataCol In DataTables("统计表1").DataCols
    dic.Add(dc.Caption, dc.Name)
Next

 

使用的时候,这样处理

 

If dic.ContainsKey("第一列") Then
    msgbox(dic("第一列"))
End If


--  作者:2900819580
--  发布时间:2019/3/19 15:02:00
--  


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

代码如下,老师看一下有没有优化的空间!

 

Dim tb As Table = Tables(e.Form.Name & "_Table3")
Dim dt As DataTable = tb.DataTable

Dim nmls As new List(of String)
Dim nmts As new List(of String)
Dim zd As New Dictionary(Of String, String)
zd.Clear

For Each c As Col In tb.Cols
    If c.Name.StartsWith("处理结果_") Then
        zd.Add(c.Caption,c.Name)
        Dim cs() As String = c.Caption.Split("_")
        If nmls.Contains(cs(0)) = False Then nmls.Add(cs(0))
        If nmts.Contains(c.Caption) = False Then nmts.Add(c.Caption)
    End If
Next
Dim nms() As String = {"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"}
For Each nm As String In nms
    If nmls.Contains(nm) Then
        Dim cn As String = Nothing
        For Each c As Col In tb.Cols
            If c.Caption.StartsWith(nm & "_") Then
                If cn > "" Then cn &= " + "
                cn &= zd(c.Caption)
            End If
        Next
        dt.DataCols.Add(nm & "_合计",Gettype(Double), cn)
       
        If  nmts.Contains(nm & "_合格")  Then  dt.DataCols.Add(nm & "_合格率",Gettype(Double), "[" & zd(nm & "_合格") & "] / [" & nm & "_合计"  & "]" )
        If  nmts.Contains(nm & "_退货")  Then  dt.DataCols.Add(nm & "_合格率",Gettype(Double), "[" & zd(nm & "_退货") & "] / [" & nm & "_合计"  & "]" )
    End If
Next


--  作者:2900819580
--  发布时间:2019/3/19 15:16:00
--  
还有一个问题,新增的列是在表单的后面的,如何用代码将他们重新排序,像9楼的图片显示一样。