以文本方式查看主题

-  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
rt.Cells(cnt+1,0).text = "总计"
rt.Cells(cnt+1,1).text = DataTables("订单").Compute("Sum(金额)")


--  作者:老有所乐
--  发布时间: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
--  

谢谢e-pnp老师