以文本方式查看主题

-  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编辑过]