以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 专业报表 分组汇总问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=174216) |
-- 作者:yifan3429 -- 发布时间:2022/1/5 21:58:00 -- 专业报表 分组汇总问题 希望和这页帮助一样的效果 http://www.foxtable.com/webhelp/topics/2239.htm 老师帮我看看哪里有问题 我的汇总全部到了最下面 还有汇总行加上底色 怎么加 Dim tb As Table = Tables("成品报价表") Dim cnt As Integer Dim drs As List(Of DataRow) Dim pds As List(Of String) = tb.DataTable.GetValues("空间",tb.Filter) For Each pd As String In pds \'分产品打印 If tb.Filter > "" Then drs = tb.DataTable.Select("空间 = \'" & pd & "\' And " & tb.Filter) Else drs = tb.DataTable.Select("空间 = \'" & pd & "\'" ) End If cnt = rt.Rows.Count \'分产品打印标题 rt.Cells(cnt, 2).Text = pd & "小计 " \'打印产品的小计 rt.Cells(cnt,8).Text = tb.compute("Sum(金额小计)", "空间 = \'" & pd & "\'") For c As Integer = 0 To ColNames2.Length - 1 \'逐列设置和填入内容 rt.Cells(0,c).Text = ColNames(c) \'列名作为标题 rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'标题内容水平居中 If ColNames(c) <> "备注" Then \' rt.Cols(c).Width = tb.Cols(ColNames2(c)).PrintWidth End If For r As Integer = 0 To tb.Rows.Count -1 \'开始填入该列内容 If ColNames(c) <>"产品图片 Picture" rt.Cells(r + 1, c).Text = tb.Rows(r)(ColNames2(c)) Else Dim name As String = Vars("bdwj") & "家具\\" & filesys.getname(tb.Rows(r)("图片")) If FileSys.FileExists(name) Then Else Network.DownloadFile(tb.Rows(r)("图片"), name) End If rt.Cells(r + 1,2).Image = GetImage(name) rt.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center \'居中显示 End If Next Next rt.Style.GridLines.All = New prt.Linedef \'设置网格线 rt.Cols(0).Width = 12 \'设置前四列的宽度,剩余的宽度被分配给5列(显示图片的那列) rt.Cols(1).Width = 20 rt.Cols(2).Width = 30 rt.Cols(3).Width = 15 rt.Cols(4).Width = 28 rt.Cols(5).Width = 18 rt.Cols(6).Width = 15 rt.Cols(7).Width = 10 rt.Cols(8).Width = 20 rt.Cols(9).Width = 20 rt.CellStyle.Spacing.All = 0.5 \'内容距离网格线0.5毫米 rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'第一行内容垂直居中 \'rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 \'rt.Rows(0).Style.TextAlignVert = prt.AlignVertEnum.Center \'第一行内容垂直居中 rt.Rows(0).Style.BackColor = Color.LightGray \'第一行背景颜色设为灰色. rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'将第一行作为表头.. Next doc.Body.Children.Add(rt) \'将表格加入到报表\' [此贴子已经被作者于2022/1/5 21:59:10编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/1/6 9:08:00 -- 这个用法仅适合逐行填充数据,1楼是逐列填充不能这样用。照搬帮助的用法,改为逐行填充 |
-- 作者:程兴刚 -- 发布时间:2022/1/6 16:09:00 -- 您的代码应该不全吧? |
-- 作者:程兴刚 -- 发布时间:2022/1/6 16:51:00 -- 大概应该是这样,自己调试: Dim tb As Table = Tables("成品报价表") Dim drs As List(Of DataRow) Dim pds As List(Of String) = tb.DataTable.GetValues("空间",tb.Filter) Dim s,Filter As String Dim Values() As String For c As Integer = 0 To ColNames2.Length - 1 \'设置列宽没必要加在循环语句里面 If ColNames(c) <> "备注" Then \' rt.Cols(c).Width = tb.Cols(ColNames2(c)).PrintWidth \'根据来源table列宽设置,报表可手动调列宽 End If Next For Each pd As String In pds \'分产品打印 If tb.Filter > "" Then Filter = "空间 = \'" & pd & "\' And " & tb.Filter Else Filter = "空间 = \'" & pd & "\'" End If drs = tb.DataTable.Select(Filter) rt.Cells(rt.Rows.Count, 2).Text = pd & "小计 " \'打印产品的小计 rt.Cells(rt.Rows.Count-1,8).Text = tb.compute("Sum(金额小计)", "空间 = \'" & pd & "\'") rt.Cells(rt.Rows.Count-1,3).SpanCols = 5 \'合并分组行没有数据的单元格,报表更好看! rt.Rows(rt.Rows.Count-1).Style.BackColor = Color.red \'第一行背景颜色设为灰色. For r As Row In drs \'开始填入该列内容 rt.Cells(rt.Rows.Count,0).Text = "" \'自动添加一个空行 For c As Integer = 0 To ColNames2.Length - 1 \'逐列设置和填入内容 If ColNames(c) <>"产品图片 Picture" rt.Cells(rt.Rows.Count-1,c).Text = r(ColNames(c)) \'列名作为标题 If tb.datatable.Cols(ColNames(c)).IsNumeric rt.Cells(rt.Rows.Count-1,c).Style.TextAlignHorz = prt.AlignHorzEnum.Right \'数值型内容水平靠右 Else rt.Cells(rt.Rows.Count-1,c).Style.TextAlignHorz = prt.AlignHorzEnum.Left \'内容水平靠左 End If End If Else Dim name As String = Vars("bdwj") & "家具\\" & filesys.getname(tb.Rows(r)("图片")) If FileSys.FileExists(name) Then Else Network.DownloadFile(tb.Rows(r)("图片"), name) End If rt.Cells(rt.Rows.Count-1,c).Image = GetImage(name) rt.Cells(rt.Rows.Count-1,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'居中显示 End If Next Next \'s = "12|20|30|15|28|18|15|10|20|20" \'这里设置的列宽会导致前面的列宽失效,建议用前面的,固定列宽用这里. \'Values = s.split("|") \'For Index As Integer = 0 To Values.Length - 1 \'rt.Cols(rt.Cols.Count).Width = val(Values(Index) \'设置列宽 \'Next rt.Style.GridLines.All = New prt.Linedef \'设置网格线 rt.CellStyle.Spacing.All = 0.5 \'内容距离网格线0.5毫米 rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'第一行内容垂直居中 rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'第一行内容水平居中 rt.Rows(0).Style.TextAlignVert = prt.AlignVertEnum.Center \'第一行内容垂直居中 rt.Rows(0).Style.BackColor = Color.LightGray \'第一行背景颜色设为灰色. rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All \'将第一行作为表头.. Next doc.Body.Children.Add(rt) \'将表格加入到报表\' |
-- 作者:程兴刚 -- 发布时间:2022/1/6 16:53:00 -- 建议看看这个: |
-- 作者:yifan3429 -- 发布时间:2022/1/10 1:28:00 -- 谢谢
[此贴子已经被作者于2022/1/12 11:03:45编辑过]
|