以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]报表增加总计栏 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=10411) |
-- 作者:老有所乐 -- 发布时间:2011/6/4 8:06:00 -- [求助]报表增加总计栏
上述的代码,会打印所有列,包括隐藏列,如果要排除隐藏列,可以采用下面的代码: Dim doc As New PrintDoc \'定义一个新报表Dim rt As New prt.RenderTable \'定义一个新表格 Dim tb as Table = Tables("订单") Dim ColNames As New List(Of String) For Each cl As Col In tb.Cols \'排除隐藏列 If cl.Visible Then ColNames.Add(cl.Name) End If Next rt.Width = "Auto" \'表格宽度为自动,也就是等于各列设置宽度之和 rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded \'表格宽度超出页宽时,可以水平换页 rt.Style.Font = tb.Font For c As Integer = 0 To ColNames.Count - 1 \'逐列设置和填入内容 rt.Cells(0,c).Text = ColNames(c) \'列名作为标题 rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'标题内容水平居中 rt.Cols(c).Width = tb.Cols(ColNames(c)).PrintWidth \'列宽等于实际列宽 If tb.Cols(ColNames(c)).IsNumeric Orelse tb.Cols(ColNames(c)).IsDate Then \'如果是数值或日期列 rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right \'数据水平靠右 End If For r As integer = 0 To tb.Rows.Count -1 \'开始填入该列内容 rt.Cells(r + 1, c).Text = tb.Rows(r)(ColNames(c)) Next Next rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) \'灰色网格线 rt.CellStyle.Spacing.All = 0.5 \'单元格内距设为0.5毫米 rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'利用行组,将第一行设为表头. doc.Body.Children.Add(rt) \'将表格加入到报表 doc.Preview()
求这个代码生成的报表后,能在这个报表的最后增加一"总计"行,对订单表的"数量"和"金额"列累计,折扣列为平均 的代码 . 谢谢!
|
-- 作者:狐狸爸爸 -- 发布时间:2011/6/4 8:26:00 -- Dim cnt As integer = tb.Rows.Count tb.Cells(cnt,0) = "总计" tb.Cells(cnt,1) = DataTables("订单").Compute("Sum(金额)") |
-- 作者:老有所乐 -- 发布时间:2011/6/4 13:20:00 -- 谢谢贺老师! 你这段代码应该放在何处合适,我怎么放在任何地方都提示"cells 不是 Table 的成员" |
-- 作者:mr725 -- 发布时间:2011/6/4 14:00:00 -- 放在第一个For 。。。。 Next 之后: Dim cnt As Integer = tb.Rows.Count |
-- 作者:老有所乐 -- 发布时间:2011/6/4 15:31:00 -- 谢谢mr725老师! 这个代码统计的是整个订单表的金额累计,我想只累计不包含隐藏行的金额累计,另外金额累计值不会自动到对应到金额列的最后一行 代码应该怎样写. [此贴子已经被作者于2011-6-4 16:17:36编辑过]
|
-- 作者:mr725 -- 发布时间:2011/6/4 16:39:00 -- 1、有隐藏就应该被筛选了,那么 DataTables("订单").Compute("Sum(金额)"," 筛选条件") 2、rt.Cells(cnt+1,tb.cols("金额").index).text = DataTables("订单").Compute("Sum(金额)"," 筛选条件") 这样就会在金额列下面显示合计金额了
|
-- 作者:老有所乐 -- 发布时间:2011/6/4 17:00:00 -- 谢谢mr老师! 我消化一下,筛选代码很长,看怎样加入. |
-- 作者:老有所乐 -- 发布时间:2011/6/5 13:43:00 --
怎样限制小数的位数,我在一楼的报表代码加了下面一句,求折扣平均值,有时小数位数有十几位,我试过几种方法都没有成功,应该怎样限制小数为3位.谢谢! rt.Cells(cnt2+1,tb.cols("折扣").index).text = Tables("订单").Compute("Avg(折扣) " ). 谢谢 |
-- 作者:e-png -- 发布时间:2011/6/5 14:26:00 -- 这样可以吗: rt.Cells(cnt2+1,tb.cols("折扣").index).text = Format(Tables("订单").Compute("Avg(折扣) " ),"0.000") |
-- 作者:老有所乐 -- 发布时间:2011/6/5 14:46:00 --
|