上述的代码,会打印所有列,包括隐藏列,如果要排除隐藏列,可以采用下面的代码:
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()
求这个代码生成的报表后,能在这个报表的最后增加一"总计"行,对订单表的"数量"和"金额"列累计,折扣列为平均 的代码 .
谢谢!
Dim cnt As integer = tb.Rows.Count
tb.Cells(cnt,0) = "总计"
tb.Cells(cnt,1) = DataTables("订单").Compute("Sum(金额)")
谢谢贺老师!
你这段代码应该放在何处合适,我怎么放在任何地方都提示"cells 不是 Table 的成员"
放在第一个For 。。。。 Next 之后:
Dim cnt As Integer = tb.Rows.Count
rt.Cells(cnt+1,0).text = "总计"
rt.Cells(cnt+1,1).text = DataTables("订单").Compute("Sum(金额)")
谢谢mr725老师!
这个代码统计的是整个订单表的金额累计,我想只累计不包含隐藏行的金额累计,另外金额累计值不会自动到对应到金额列的最后一行
代码应该怎样写.
[此贴子已经被作者于2011-6-4 16:17:36编辑过]
1、有隐藏就应该被筛选了,那么 DataTables("订单").Compute("Sum(金额)"," 筛选条件")
2、rt.Cells(cnt+1,tb.cols("金额").index).text = DataTables("订单").Compute("Sum(金额)"," 筛选条件") 这样就会在金额列下面显示合计金额了
怎样限制小数的位数,我在一楼的报表代码加了下面一句,求折扣平均值,有时小数位数有十几位,我试过几种方法都没有成功,应该怎样限制小数为3位.谢谢!
rt.Cells(cnt2+1,tb.cols("折扣").index).text = Tables("订单").Compute("Avg(折扣) " ).
谢谢
这样可以吗: rt.Cells(cnt2+1,tb.cols("折扣").index).text = Format(Tables("订单").Compute("Avg(折扣) " ),"0.000")