Foxtable(狐表)用户栏目专家坐堂 → 做了一个专业报表,发现插入的行无法自动合并,求指教


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

主题:做了一个专业报表,发现插入的行无法自动合并,求指教

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


加好友 发短信
等级:三尾狐 帖子:721 积分:6391 威望:0 精华:0 注册:2011/6/26 11:45:00
做了一个专业报表,发现插入的行无法自动合并,求指教  发帖心情 Post By:2017/7/14 16:05:00 [只看该作者]

Dim doc As New PrintDoc
Dim rt As Prt.RenderTable
Dim rx As prt.RenderText
Dim tbl As Table = Tables("报价单明细")
Dim Rows As List(Of DataRow)
Dim Regions As List(Of String) = tbl.DataTable.GetValues("报价大类") 
doc.Pagesetting.LandScape = True
For Each Region As String In Regions
    rx = New prt.RenderText
    rx.Style.FontSize = 14
    rx.Style.FontBold = True
    rx.Style.Spacing.Bottom = 2
    'rx.Text = "项目:" & Region
    rx.Text = Region
    doc.Body.Children.Add(rx)
    rt = New prt.RenderTable
    rt.Style.Font = Tables("报价单明细").Font
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center
    rt.Style.GridLines.All = New prt.LineDef(0.3,Color.LightGray)
    rt.Style.Spacing.Bottom = 5
    rt.CellStyle.Spacing.All = 1
    rt.Style.Font = tbl.Font
   Rows = tbl.DataTable.Select("[报价大类] = '" & Region & "'")
   Dim ColNames As String() = New String(){"报价序号","CODE","项目","二级项目","币种","金额","单位","税率","备注"} 
   Dim cn As String() = New String(){"NO.","CODE","项目","二级项目","币种","金额","单位","税率","备注"} ' 别名
   Dim mc As Integer = 3 '合并前三个列
    'tbl.Sort ="报价序号,CODE,项目"
    For c As Integer = 0 To ColNames.Length - 1
        Dim lr As Integer   '用于保存合并区域的起始行
        rt.Cells(0,c).Text = cn(c) '第一列使用别名
        rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center
        rt.Cols(c).Width = tbl.Cols(c).PrintWidth
      
        For r As Integer = 0 To Rows.Count -1 
            If c <= mc -1 Then '如果是要合并的列
               Dim  merge As Boolean = True 
              If r = 0 Then
                merge = False
              Else
                For n As  Integer = 0 To c
               If Rows(r)(Colnames(n)) <> Rows(r-1)(Colnames(n))
                merge = False
                 Exit For
                End If
            Next
         End If
         If merge Then
            rt.cells(lr,c).SpanRows = rt.Cells(lr,c).SpanRows + 1
         Else
            rt.Cells(r + 1,c).Text = rows(r)(ColNames(c))
            lr = r + 1
         End If
         Else
             rt.Cells(r + 1,c).Text = rows(r)(ColNames(c))
          End If

        Next
    Next
    rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All '将第一行作为表头.
    doc.Body.Children.Add(rt)
Next
doc.preview()

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


加好友 发短信
等级:三尾狐 帖子:721 积分:6391 威望:0 精华:0 注册:2011/6/26 11:45:00
  发帖心情 Post By:2017/7/14 16:06:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20170714160356.png
图片点击可在新窗口打开查看

在通关费用中无法合并!
[此贴子已经被作者于2017/7/14 16:07:02编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/7/14 17:04:00 [只看该作者]

这个代码

 

Rows = tbl.DataTable.Select("[报价大类] = '" & Region & "'")

 

改成

 

Rows = tbl.DataTable.Select("[报价大类] = '" & Region & "'",  "报价序号,CODE,项目")


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


加好友 发短信
等级:三尾狐 帖子:721 积分:6391 威望:0 精华:0 注册:2011/6/26 11:45:00
  发帖心情 Post By:2017/7/15 9:05:00 [只看该作者]

测试OK!谢谢指点!

 回到顶部