以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  统计当前表  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=192451)

--  作者:yaojun
--  发布时间:2024/6/23 15:52:00
--  统计当前表
请问如下代码是统计后台表的,请问如何改为统计当前表呀:,请大师修改下,谢谢!
Dim b As New CrossTableBuilder("排产计划表",DataTables("生产进度表"))
b.HGroups.AddDef("地址")
b.HGroups.AddDef("设计师")
b.HGroups.AddDef("拆单员")
b.HGroups.AddDef("属性")
b.HGroups.AddDef("生产状态")
b.HGroups.AddDef("开料_开工日期",DateGroupEnum.none)
b.VGroups.AddDef("开料_开工日期",DateGroupEnum.Year,"{0}年")
b.VGroups.AddDef("开料_开工日期","{0}月")
b.VGroups.AddDef("开料_开工日期",DateGroupEnum.day,"{0}日")
b.Totals.AddDef("开料_数量")
b.OrderByTotal = True
b.VerticalTotal= True
b.HorizontalTotal = True
Dim t As Table = e.form.controls("Table5").Table
t.datasource = b.BuildDataSource
t.DataTable.GlobalHandler.AfterEdit = True
t.AllowEdit = True
e.form.controls("Table5").Table.AutoSizeCols(3)

t.DataTable.DataCols.Add("_sortkey", Gettype(Decimal))
t.Sort = "开料_开工日期,地址"
For Each r As Row In t.Rows
    r("_sortkey") = r.Index
Next
t.rows(t.rows.count - 1).Move(0)
t.Sort = "_sortkey"
t.DataTable.AcceptChanges
t.ResumeRedraw
t.Font = New Font("宋体",10.5,FontStyle.Regular)

For Each cl As Col In t.Cols  \'整表居中
            cl.TextAlign = TextAlignEnum.Center
  Next
t.DefaultRowHeight = 31
t.Cols("地址").TextAlign = TextAlignEnum.Left

--  作者:有点蓝
--  发布时间:2024/6/23 21:05:00
--  
所谓的【当前表】是指什么?是指已经加载的表数据?还是指table筛选后的数据?

如果是后者,加上筛选条件即可
b.HorizontalTotal = True
b.filter = Tables("生产进度表").filter
Dim t As Table = e.form.controls("Table5").Table
t.datasource = b.BuildDataSource

--  作者:yaojun
--  发布时间:2024/6/24 8:11:00
--  
谢谢,这样可以!但是这段代码的结果合计行没有到第一行,而是在第二行,请问这是怎么回事,怎样修改代码:
Dim b As New CrossTableBuilder("排产计划表",DataTables("生产进度表"))
b.HGroups.AddDef("地址")
b.HGroups.AddDef("设计师")
b.HGroups.AddDef("拆单员")
b.HGroups.AddDef("属性")
b.HGroups.AddDef("生产状态")
b.HGroups.AddDef("开料_开工日期",DateGroupEnum.none)
b.VGroups.AddDef("开料_开工日期",DateGroupEnum.Year,"{0}年")
b.VGroups.AddDef("开料_开工日期","{0}月")
b.VGroups.AddDef("开料_开工日期",DateGroupEnum.day,"{0}日")
b.Totals.AddDef("开料_数量")
b.OrderByTotal = True
b.VerticalTotal= True
b.HorizontalTotal = True
b.filter = Tables("生产进度表").filter
Dim t As Table = e.form.controls("Table5").Table
t.datasource = b.BuildDataSource
t.DataTable.GlobalHandler.AfterEdit = True
t.AllowEdit = True
e.form.controls("Table5").Table.AutoSizeCols(3)
t.DefaultRowHeight = 31
t.DataTable.DataCols.Add("_sortkey", Gettype(Decimal))
t.rows(t.rows.count - 1).Move(0)

t.rows(0)("_sortkey") = 0

Dim i As Integer = 1

For Each dr As DataRow In t.DataTable.Select("_sortkey is null","开料_开工日期,地址")

    dr("_sortkey") = i

i+=1
Next

t.Sort = "_sortkey"
t.DataTable.AcceptChanges
t.ResumeRedraw
t.Font = New Font("宋体",10.5,FontStyle.Regular)
For Each cl As Col In t.Cols  \'整表居中
            cl.TextAlign = TextAlignEnum.Center
  Next
t.Cols("地址").TextAlign = TextAlignEnum.Left
图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20240624081015.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2024/6/24 8:43:00
--  
下面2句代码放到最后

t.rows(t.rows.count - 1).Move(0)
t.rows(0)("_sortkey") = 0

--  作者:yaojun
--  发布时间:2024/6/24 9:00:00
--  
放到最后则会显示“不能在排序状态下移动行”,与如下代码效果一样:
Dim b As New CrossTableBuilder("排产计划表",DataTables("生产进度表"))
b.HGroups.AddDef("地址")
b.HGroups.AddDef("设计师")
b.HGroups.AddDef("拆单员")
b.HGroups.AddDef("属性")
b.HGroups.AddDef("生产状态")
b.HGroups.AddDef("开料_开工日期",DateGroupEnum.none)
b.VGroups.AddDef("开料_开工日期",DateGroupEnum.Year,"{0}年")
b.VGroups.AddDef("开料_开工日期","{0}月")
b.VGroups.AddDef("开料_开工日期",DateGroupEnum.day,"{0}日")
b.Totals.AddDef("开料_数量")
b.OrderByTotal = True
b.VerticalTotal= True
b.HorizontalTotal = True
b.filter = Tables("生产进度表").filter
Dim t As Table = e.form.controls("Table5").Table
t.datasource = b.BuildDataSource
t.DataTable.GlobalHandler.AfterEdit = True
t.AllowEdit = True
e.form.controls("Table5").Table.AutoSizeCols(3)
t.DefaultRowHeight = 31
t.DataTable.DataCols.Add("_sortkey", Gettype(Decimal))
t.Sort = "开料_开工日期,地址"
For Each r As Row In t.Rows
    r("_sortkey") = r.Index
Next
t.rows(t.rows.count - 1).Move(0)
t.Sort = "_sortkey"
t.DataTable.AcceptChanges
t.ResumeRedraw
t.Font = New Font("宋体",10.5,FontStyle.Regular)

For Each cl As Col In t.Cols  \'整表居中
            cl.TextAlign = TextAlignEnum.Center
  Next

t.Cols("地址").TextAlign = TextAlignEnum.Left

--  作者:有点蓝
--  发布时间:2024/6/24 9:06:00
--  
把下面代码去掉,如果有_sortkey列,默认就会按_sortkey排序的,不需要多此一举

t.Sort = "_sortkey"

--  作者:yaojun
--  发布时间:2024/6/24 9:22:00
--  
我想让合计行到第一行,去掉这句就实现不了这样的目的,如果不去掉这句就可以实现,只是弹出一个对话框,但是关闭对话框功能得到了实现,如果有办法让这个弹窗不出现也可以


[此贴子已经被作者于2024/6/24 9:23:58编辑过]

--  作者:yaojun
--  发布时间:2024/6/24 9:27:00
--  
谢谢蓝老师,我已经找到方法了,代码再换下顺序就可以,另外我想问下,增加一列日期列,怎么显示出来的是数字,而不是日期:
b.HGroups.AddDef("预交日期")
[此贴子已经被作者于2024/6/24 9:30:06编辑过]

--  作者:有点蓝
--  发布时间:2024/6/24 9:33:00
--  

添加水平分组到HGroups的语法是: 

HGroups.AddDef(Name)
HGroups.AddDef(Name, NewName)
HGroups.AddDef(Name, NewName, NewCaption)
HGroups.AddDef(Name, DateGroup)
HGroups.AddDef(Name, DateGroup, NewName)
HGroups.AddDef(Name, DateGroup, NewName, NewCaption)

参数说明

Name:        字符型,指定分组列。
NewName:     字符型,用于给分组列指定一个新的名称,这个名称在统计表中显示。
NewCaption:  字符型,用于给分组列设置标题。
DateGroup:  DateGroupEnum型枚举,如果分组列是日期列,可用此属性指定如何根据日期进行分组,默认按月分组。

DateGroupEnum枚举的可选值:

 

None :     不分组
Year:      按年分组
Quarter:   按季度分组
Month:     按月分组
Week:      按周分组
Day:       按天分组,月中的某一天。
Hour:      按小时分组
Minute:    按分钟分组 Second:    按秒分组