以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]统计汇总  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=157712)

--  作者:天一生水
--  发布时间:2020/10/26 17:00:00
--  [求助]统计汇总
老师好!
怎样在统计表中,每一天下面增加一行汇总行。
汇总列:[涨跌次数]=牛的次数-熊的次数;  [预测涨跌幅]=牛的涨跌幅+熊的涨跌幅。
如图,图一是数据表;图二是统计表:

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


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片 (1).jpg
图片点击可在新窗口打开查看




\'\'\'
Dim cn As String = "gp99"   \'sql外部数据源
Dim bm As String = "统计表1"
Dim b As New SQLGroupTableBuilder(bm,"批量预测")
b.ConnectionName = cn
b.Groups.AddDef("日期",DateGroupEnum.Month,"月份") \'根据产品分组
b.Groups.AddDef("日期",DateGroupEnum.none) \'根据产品分组

b.Groups.AddDef("牛熊")    \'根据分组
b.Totals.AddDef("牛熊",AggregateEnum.Count,"涨跌次数")
b.Totals.AddDef("预测涨跌幅") \'对数量进行统计
b.Build \'生成统计表

Tables("批量选股_Table10").DataSource = b.BuildDataSource()


Dim dt As Table = Tables("批量选股_Table10")  
Dim g As Subtotalgroup
dt.SubtotalGroups.Clear()
\'定义分组
g = New Subtotalgroup
g.GroupOn = "月份"
g.TotalOn = "牛熊,预测涨跌幅,涨跌次数"
dt.SubtotalGroups.Add(g)
dt.Subtotal() \'生成汇总模式
dt.GroupAboveData = True  \'分组行位于数据行之上
dt .TreeVisible = True \'显示目录树

With Tables("批量选股_Table10")  \'合并
    .MergeMode = MergeModeEnum.Standard \'标准合并模式
    .MergeCols.Clear() \'清除原来的合并列
    Dim Names As String() = {"月份","日期","牛熊"}
    For i As Integer = 0 To Names.Length -1
        .MergeCols.Add(Names(i))
    Next
    .AllowMerge = True \'启用合并模式
End With



--  作者:有点蓝
--  发布时间:2020/10/26 17:04:00
--  
按日期汇总:g.GroupOn = "日期"
--  作者:天一生水
--  发布时间:2020/10/26 21:13:00
--  

谢谢蓝老师!可以了。

 

再问个问题:

如果统计表采用一天一行的方式,如图,统计列的表达式怎样写?

 


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片 (2).jpg
图片点击可在新窗口打开查看 

 

Dim cn As String = "gp99"   \'sql外部数据源
Dim bm As String = "统计表1"
Dim b As New SQLGroupTableBuilder(bm,"批量预测")
b.ConnectionName = cn
b.Groups.AddDef("日期",DateGroupEnum.Month,"月份")
b.Groups.AddDef("日期",DateGroupEnum.none)

b.Groups.AddDef("牛熊","牛涨跌次数")    \'分组
b.Totals.AddDef("牛熊",AggregateEnum.Count,"牛涨跌次数")
 
b.Groups.AddDef("牛熊","熊涨跌次数")    \'分组
b.Totals.AddDef("牛熊",AggregateEnum.Count,"熊涨跌次数")
 
......
b.Build \'生成统计表
Tables("批量选股_Table10").DataSource = b.BuildDataSource()


--  作者:有点蓝
--  发布时间:2020/10/26 21:39:00
--  
Dim cn As String = "gp99"   \'sql外部数据源
Dim bm As String = "统计表1"
Dim b As New SQLGroupTableBuilder(bm,"批量预测")
b.ConnectionName = cn
b.Groups.AddDef("日期",DateGroupEnum.Month,"月份")
b.Groups.AddDef("日期",DateGroupEnum.none)
b.Totals.Addexp("牛涨跌次数","iif(牛熊,1,0)")
b
.Totals.Addexp("熊涨跌次数","iif(牛熊=false,1,0)")


--  作者:天一生水
--  发布时间:2020/10/27 19:21:00
--  

谢谢蓝老师!

但是出个问题,统计表绑定窗口表显示时会报错,直接在数据表显示没问题。这是什么原因?

代码如下:

Dim bm As String = "统计表1"
Dim b As New SQLGroupTableBuilder(bm,"批量预测")
b.ConnectionName = cn
b.Groups.AddDef("日期",DateGroupEnum.Month,"月份")
b.Groups.AddDef("日期",DateGroupEnum.none)
b.Totals.Addexp("牛涨跌次数","Case When 牛熊 =\'牛\' then 1 else 0 End")
b.Totals.Addexp("熊涨跌次数","Case When 牛熊 =\'熊\' then -1 else 0 End")
b.Totals.Addexp("牛预测涨跌幅","Case When 牛熊 =\'牛\' then 预测涨跌幅 else 0 End")
b.Totals.Addexp("熊预测涨跌幅","Case When 牛熊 =\'熊\' then 预测涨跌幅 else 0 End")
b.Totals.Addexp("牛熊次数","Case When 牛熊 =\'牛\' then 1 else 0 End + Case When 牛熊 =\'熊\' then -1 else 0 End")
b.Totals.Addexp("牛熊涨跌幅","Case When 牛熊 =\'牛\' then 预测涨跌幅 else 0 End + Case When 牛熊 =\'熊\' then 预测涨跌幅 else 0 End")
b.Build \'生成统计表

 

\'MainTable = Tables("统计表1")     ----------------这样显示没问题
Tables("批量选股_Table10").DataSource = b.BuildDataSource()    ------------绑定窗口表显示会报错

 

 


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片 (8).jpg
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2020/10/27 20:10:00
--  
去掉这一句:b.Build
--  作者:天一生水
--  发布时间:2020/10/27 21:45:00
--  

谢谢老师!

还有个问题:这个窗口表,没有绑定数据表,类型是normal。我设置最后两列的样式,如果大于0,是红色;小于0,是绿色。

但是没有效果。

代码如下,是什么原因?

 

项目属性-全局表事件-DrawCell:

 

Select Case e.Table.Name

Case "批量选股_table10"
        DataTables("批量选股_table10").AddUserStyle("a1", Color.skyblue, Color.black)  \'未来
        DataTables("批量选股_table10").AddUserStyle("b1", Color.Red , Color.White)    \'正值
        DataTables("批量选股_table10").AddUserStyle("c1", Color.GreenYellow, Color.blue)    \'负值
       
        If e.Col.Name = "日期" Then
            If e.Row.IsNull(e.Col.Name) = False \'且该列已经输入内容
                If e.Row(e.Col.Name) > Date.Today Then
                    e.Style = "a1"  \'那么用"不及格"样式绘制单元格
                End If
            End If
        Else

            If e.Col.Name = "牛熊次数" Or e.Col.Name = "牛熊涨跌幅" Then
                If e.Row.IsNull(e.Col.Name) = False \'且该列已经输入内容
                    If e.Row(e.Col.Name) > 0 Then \'如果该列的值小于60
                        e.Style = "b1"  \'那么用样式绘制单元格
                    Else
                        e.Style = "c1"  \'那么用样式绘制单元格
                    End If
                End If
            End If           
       

End Select

 

 

这三句代码写进窗口的afterload也不行:

Tables("批量选股_table10").DataTable.AddUserStyle("a1", Color.skyblue, Color.black)  \'未来
Tables("批量选股_table10").DataTable.AddUserStyle("b1", Color.Red , Color.White)    \'正值
Tables("批量选股_table10").DataTable.AddUserStyle("c1", Color.GreenYellow, Color.blue)    \'负值

 


[此贴子已经被作者于2020/10/27 21:45:21编辑过]

--  作者:有点蓝
--  发布时间:2020/10/27 21:50:00
--  
这三句代码放到Tables("批量选股_Table10").DataSource = b.BuildDataSource()之后
--  作者:天一生水
--  发布时间:2020/10/27 22:05:00
--  

还是没效果


--  作者:有点蓝
--  发布时间:2020/10/27 22:19:00
--  
请上传实例说明