Foxtable(狐表)用户栏目专家坐堂 → [求助]报表增加总计栏


  共有11217人关注过本帖树形打印复制链接

主题:[求助]报表增加总计栏

帅哥哟,离线,有人找我吗?
老有所乐
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
[求助]报表增加总计栏  发帖心情 Post By: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()

 

求这个代码生成的报表后,能在这个报表的最后增加一"总计"行,对订单表的"数量"和"金额"列累计,折扣列为平均   的代码  .

谢谢!

 

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/6/4 8:26:00 [只看该作者]

Dim cnt As integer  = tb.Rows.Count

tb.Cells(cnt,0) = "总计"

tb.Cells(cnt,1) = DataTables("订单").Compute("Sum(金额)")


 回到顶部
帅哥哟,离线,有人找我吗?
老有所乐
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
  发帖心情 Post By:2011/6/4 13:20:00 [只看该作者]

谢谢贺老师!

你这段代码应该放在何处合适,我怎么放在任何地方都提示"cells 不是 Table 的成员"


 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By: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(金额)")


 回到顶部
帅哥哟,离线,有人找我吗?
老有所乐
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
  发帖心情 Post By:2011/6/4 15:31:00 [只看该作者]

谢谢mr725老师!

这个代码统计的是整个订单表的金额累计,我想只累计不包含隐藏行的金额累计,另外金额累计值不会自动到对应到金额列的最后一行

代码应该怎样写.

[此贴子已经被作者于2011-6-4 16:17:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2011/6/4 16:39:00 [只看该作者]

1、有隐藏就应该被筛选了,那么 DataTables("订单").Compute("Sum(金额)"," 筛选条件")

2、rt.Cells(cnt+1,tb.cols("金额").index).text = DataTables("订单").Compute("Sum(金额)"," 筛选条件")  这样就会在金额列下面显示合计金额了

 


 回到顶部
帅哥哟,离线,有人找我吗?
老有所乐
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
  发帖心情 Post By:2011/6/4 17:00:00 [只看该作者]

谢谢mr老师!

我消化一下,筛选代码很长,看怎样加入.


 回到顶部
帅哥哟,离线,有人找我吗?
老有所乐
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
  发帖心情 Post By:2011/6/5 13:43:00 [只看该作者]

             

怎样限制小数的位数,我在一楼的报表代码加了下面一句,求折扣平均值,有时小数位数有十几位,我试过几种方法都没有成功,应该怎样限制小数为3位.谢谢!

     rt.Cells(cnt2+1,tb.cols("折扣").index).text = Tables("订单").Compute("Avg(折扣) " ).

谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
e-png
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2011/6/5 14:26:00 [只看该作者]

这样可以吗: rt.Cells(cnt2+1,tb.cols("折扣").index).text = Format(Tables("订单").Compute("Avg(折扣) " ),"0.000")

 回到顶部
帅哥哟,离线,有人找我吗?
老有所乐
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:746 积分:6673 威望:0 精华:1 注册:2008/9/1 11:46:00
  发帖心情 Post By:2011/6/5 14:46:00 [只看该作者]

谢谢e-pnp老师


 回到顶部
总数 12 1 2 下一页