Foxtable(狐表)用户栏目专家坐堂 → 专业报表调取后台数据如何合并单元格?


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

主题:专业报表调取后台数据如何合并单元格?

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
专业报表调取后台数据如何合并单元格?  发帖心情 Post By:2010/5/14 8:16:00 [只看该作者]

请问老大,专业报表调取后台数据如何合并单元格(如何展现合并模式结果)?

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


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

打印三列,合并第一列:

 

Dim doc As New PrintDoc '定义一个新报表
Dim rt As New prt.RenderTable '定义一个新表格
Dim tb as Table = Tables("订单")
Dim ColNames As String() = New String(){"产品", "日期", "数量"}
rt.Width = "Auto" '表格宽度为自动,也就是等于各列设置宽度之和
rt.CanSplitHorz = True '表格宽度超出页宽时,可以水平换页
rt.Style.Font = tb.Font
Dim lr As Integer
For c As Integer = 0 To ColNames.Length - 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 '开始填入该列内容
        If c = 0 then
            if (r = 0 orelse tb.Rows(r)(ColNames(c)) <> tb.Rows(r - 1)(ColNames(c))) Then
                rt.Cells(r + 1, c).Text = tb.Rows(r)(ColNames(c))
                lr = r + 1
            Else
                rt.cells(lr,c).SpanRows  = rt.cells(lr,c).SpanRows  + 1
            End If
        Else
            rt.Cells(r + 1, c).Text = tb.Rows(r)(ColNames(c))
        End If
    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()


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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/5/14 8:33:00 [只看该作者]

谢谢老大及时回复


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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/5/14 8:44:00 [只看该作者]

再请教老大,假如“订单”表前三列都要合并模式,(产品、客户、雇员)要如何改动上面的代码呢?

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


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

第二列合并的前提是前两列的内容和上一行相同,第三列合并的条件是前三列和上一行相同,你根据条件,自行修改吧。


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


加好友 发短信
等级:一尾狐 帖子:445 积分:3025 威望:0 精华:0 注册:2008/9/13 10:49:00
  发帖心情 Post By:2010/5/16 11:01:00 [只看该作者]

楼主要的是这样的效果吧

 


图片点击可在新窗口打开查看此主题相关图片如下:合并.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:一尾狐 帖子:445 积分:3025 威望:0 精华:0 注册:2008/9/13 10:49:00
  发帖心情 Post By:2010/5/16 11:02:00 [只看该作者]

Dim doc As New PrintDoc
Dim rt As New prt.RenderTable
Dim tb as Table = Tables("订单")
tb.Sort = "产品,客户,雇员"
'rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
rt.Style.Font = tb.Font
rt.Style.GridLines.All = prt.Linedef.Default
rt.CellStyle.Spacing.All = 1
rt.Style.TextAlignVert = prt.AlignVertEnum.Center
rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center
Dim FirstRow As Integer = 1
    rt.Cells(0,0).Text = "产品"
    rt.Cells(0,1).Text = "客户"
    rt.Cells(0,2).Text = "雇员"
    For r As integer = 0 To tb.Rows.Count -1
        If tb(r,0) Is Nothing Then
            Continue for
        End if
        rt.Cells(r+1, 1).Text = tb(r,1)
        rt.Cells(r+1, 2).Text = tb(r,2)
        rt.Cells(r+1, 3).Text = tb(r,3)
        If r > 0 AndAlso tb(r,0) = tb(r-1,0) Then
               rt.Cells(FirstRow,0).SpanRows =  rt.Cells(FirstRow,0).SpanRows  + 1
               if tb(r,1) = tb(r-1,1) then
                   rt.Cells(FirstRow,1).SpanRows =  rt.Cells(FirstRow,1).SpanRows  + 1
               end if
               if tb(r,2) = tb(r-1,2) then
                   rt.Cells(FirstRow,2).SpanRows =  rt.Cells(FirstRow,2).SpanRows  + 1
               end if
            
            Else
                 rt.Cells(r+1, 0).Text = tb(r,0)
                 FirstRow = r + 1
         End if
    Next
doc.Body.Children.Add(rt)
doc.Preview()

 回到顶部