以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]统计表中能否自动生成一列进行排名(已解决) (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=10908) |
||||
-- 作者:yyzlxc -- 发布时间:2011/6/29 12:32:00 -- [求助]统计表中能否自动生成一列进行排名(已解决) 根据以下代码,生成当月汇总表,设想增加一列,用于排名。在帮助中找到相关案例,加入后运行出错。分析问题可能出在动态增加列的代码,因为在帮助中提示,需要重新打开项目生效,是否有办法让增加的列即时生效,或通过其他途径实现目的。谢谢!!
Case "当月汇总"
粗体为新增的代码(文件登录密码123)。
[此贴子已经被作者于2011-6-29 13:12:14编辑过]
|
||||
-- 作者:czy -- 发布时间:2011/6/29 12:41:00 -- http://help.foxtable.com/topics/1428.htm
|
||||
-- 作者:yyzlxc -- 发布时间:2011/6/29 13:11:00 -- 谢谢czy老师,问题解决,达到预期效果。再次感谢!! 用一条代码替换动态增加列的代码,即获成功!! DataTables("当月汇总").DataCols.Add("名次", GetType(Byte)) 有图为证!
此主题相关图片如下:aa.png [此贴子已经被作者于2011-6-29 13:18:09编辑过]
|
||||
-- 作者:明帆 -- 发布时间:2011/10/14 8:35:00 -- Case "当月汇总" \'先进行当月日汇总 Dim b As New GroupTableBuilder("当月日汇总",DataTables("日报源表")) b.Groups.AddDef("报表年月") \'根据报表年月列用于分组 b.Groups.AddDef("日期", DateGroupEnum.None) \'添加日期列用于分组 b.Groups.AddDef("单位") \'根据单位分组 b.Totals.AddDef("加工费") \'添加加工费列用于统计 b.Totals.AddDef("投工","全员人数") \'添加投工列用于统计 \' b.Totals.AddDef("名次") b.Build \'生成按日汇总表 Dim t As Table = Tables("当月日汇总") t.DataTable.DataCols.Add("全员人均", Gettype(Double),"iif(全员人数=0,null,加工费/全员人数)") MainTable = t \'打开生成的按日汇总表 t.Position = t.Rows.Count - 1 DataTables("当月日汇总").DataCols("加工费").SetFormat("0.00") DataTables("当月日汇总").DataCols("全员人均").SetFormat("0.00") \'然后在当月日汇总的基础上进行当月汇总 Dim d As New GroupTableBuilder("当月汇总",DataTables("当月日汇总")) d.Groups.AddDef("报表年月") \'根据报表年月列用于分组 d.Groups.AddDef("单位") \'根据单位列用于分组 d.Totals.AddDef("加工费") \'添加加工费列用于统计 d.Totals.AddDef("全员人数") \'添加投工列用于统计 d.Totals.AddDef("全员人数",AggregateEnum.Average,"月均人数") \'添加月均人数列用于统计 d.Build \'生成按月汇总表 Dim r As Table = Tables("当月汇总") r.DataTable.DataCols.Add("日人均加工费", Gettype(Double),"iif(全员人数=0,null,加工费/全员人数)") r.DataTable.DataCols.Add("月人均加工费", Gettype(Double),"iif(月均人数=0,null,加工费/月均人数)") MainTable = r \'打开生成的按月汇总表 r.Position = r.Rows.Count - 1 DataTables("当月汇总").DataCols("加工费").SetFormat("0.00") DataTables("当月汇总").DataCols("月均人数").SetFormat("0.00") DataTables("当月汇总").DataCols("日人均加工费").SetFormat("0.00") DataTables("当月汇总").DataCols("月人均加工费").SetFormat("0.00") DataTables("当月汇总").DataCols.Add("名次", Gettype(Byte)) \'根据代码生成的汇总表进行排名 \'获得报表年月数据,保存在集合中 Dim bjs As List(Of String) = DataTables("当月汇总").GetUniqueValues("","报表年月") For Each bj As String In bjs \'获得该报表年月的全部行,按总分降序排序 Dim drs As List(Of DataRow) = DataTables("当月汇总").Select("[报表年月] = " & bj, "月人均加工费 DESC") For n As Integer = 0 To drs.Count - 1 \'遍历所有行 If n > 0 AndAlso drs(n)("月人均加工费") = drs(n-1)("月人均加工费") Then \'如果月人均加工费和上一行相同 drs(n)("名次") = drs(n-1)("名次") \'则排名等于上一行 Else drs(n)("名次") = n + 1 \'设置名次 End If Next Next Tables("当月汇总").Sort = "名次 " |