以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  还是没搞定的分页,求指点  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=29689)

--  作者:晕了快扶我
--  发布时间:2013/3/11 20:06:00
--  还是没搞定的分页,求指点

Dim Doc As New PrintDoc

Dim prs As Integer = 15   \'每页行数
Dim tb As Table = Tables("销售出库单主表.销售出库单子表")
For p As Integer = 0 To Math.Ceiling(tb.Rows.Count / prs) - 1
    Dim rx As New prt.RenderTable
    rx.CellStyle.Spacing.All = 0.6 \'单元格内距设为0.5毫米
    rx.Style.GridLines.All =  New prt.Linedef(0.1, Color.black)
    Dim icou As Integer
    rx.Width = 201
    rx.Style.Font = New Font("宋体", 9)
    rx.Style.TextAlignVert =prt.AlignVertEnum.Center
    Dim hd As Integer = tb.HeaderRows
    Dim cnt As Integer
    tb.CreateReportHeader(rx,True)
    rx.Cols.Insert(0) \'在左边插入一列,用于打印行号
    rx.Cols(0).Width = 8 \'设置行号列的宽度
    rx.Cells(0,0).SpanRows =2
    rx.Cells(0,0).Text = "№"
    For c As Integer = 0 To tb.Cols.Count - 1
        If tb.Cols(c).Visible
            For r As Integer = p * prs To math.min(tb.Rows.Count - 1,( p + 1) * prs - 1)
                rx.Rows(r).Height = 5.5
                rx.Cells(r - p * prs + hd, cnt+1).Text = tb.rows(r)(c)
                rx.Cells(r - p * prs + hd,0).text = r+1  \'
                rx.Cols(7).Style.Font = New Font("Times New Roman",9)
                rx.Cols(6).Style.Font = New Font("Times New Roman",9)
                rx.Cols(5).Style.Font = New Font("Times New Roman",9)
                rx.Cols(4).Style.Font = New Font("Times New Roman",9)
                rx.Cells(r - p * prs + hd,10).Text = "***"
                rx.Cells(r - p * prs + hd,9).Text = "***"
                rx.Cells(r - p * prs + hd,8).Text = Format(tb.rows(r)(7),"#,###,###")
                rx.Cells(r - p * prs + hd,7).Text =Format(tb.rows(r)(6),"#,###,###")
                rx.Cells(r - p * prs + hd,6).Text =Format(tb.rows(r)(5),"#,###,###")
                rx.Cells(r - p * prs + hd,5).Text =Format(tb.rows(r)(4),"#,###,###")
                rx.Cells(r - p * prs + hd,4).Style.TextAlignHorz =prt.AlignHorzEnum.Center
                rx.Cols(4).Width = 8
                rx.Cols(10).Width = 10
                rx.Cols(9).Width = 10
                rx.Cols(8).Width = 15
                rx.Cols(7).Width = 15
                rx.Cols(6).Width = 15
                rx.Cols(5).Width = 15
                rx.Cols(3).Width = 32
                rx.Cols(2).Width = 41
            Next
            If p = math.Ceiling(tb.Rows.Count / prs) - 1
                Dim i As Integer =tb.Rows.count - (math.Ceiling(tb.Rows.Count / prs) - 1)*15 ’取最后一页的行数
                rx.Cells(i+hd,0).text = "" \'
                rx.Rows(i+hd).Height = (15-i)*5.5
            ElseIf p < math.Ceiling(tb.Rows.Count / prs) - 1
                rx.BreakAfter = prt.BreakEnum.Page
            End If
            cnt = cnt+1
        End If
    Next
    doc.Body.Children.Add(rx)
Next
doc.Preview()

 

想要的效果是这样的


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

第一页是没有问题的,一旦换页就有问题了,表格底部会多出行来,如下图

 


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


 


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

请高手帮忙改改,折腾几天了,之前那个帖子有误导大家了,我求证后改过来图片点击可在新窗口打开查看


--  作者:晕了快扶我
--  发布时间:2013/3/12 9:15:00
--  
以下是引用muhua在2013-3-12 8:15:00的发言:
把你具体的例子发上来。

能不能远程帮我看下呢?折腾这个例子好麻烦啊图片点击可在新窗口打开查看

昨天查了下,应该是

 rx.Cells(r - p * prs + hd, cnt+1).Text = tb.rows(r)(c)
这句有问题,但是不知道怎么改过来


--  作者:晕了快扶我
--  发布时间:2013/3/12 9:28:00
--  

不增加最后一页最后一行的行高的话,依然会有问题,就是换页后会多出一行来

 


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

--  作者:晕了快扶我
--  发布时间:2013/3/12 10:27:00
--  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb

窗口的的打印按钮里的,折腾好了图片点击可在新窗口打开查看


--  作者:晕了快扶我
--  发布时间:2013/3/12 10:42:00
--  
以下是引用muhua在2013-3-12 10:40:00的发言:
报表的格式不一样哦,你发的代码是否是你需要设置的代码呀?

一样的啊,我发的代码只是截取了一段而已,表头表尾的设置因为太啰嗦就没有发了


--  作者:晕了快扶我
--  发布时间:2013/3/12 10:47:00
--  
你增加关联表的行到16行,就看出问题来了,第一页是没问题的
--  作者:晕了快扶我
--  发布时间:2013/3/12 12:09:00
--  
图片点击可在新窗口打开查看顶!
--  作者:狐狸爸爸
--  发布时间:2013/3/12 13:22:00
--  

Dim Doc As New PrintDoc

Dim prs As Integer = 15   \'每页行数
Dim tb As Table = Tables("销售出库单主表.销售出库单子表")
For p As Integer = 0 To Math.Ceiling(tb.Rows.Count / prs) - 1
    Dim rx As New prt.RenderTable
    rx.CellStyle.Spacing.All = 0.6 \'单元格内距设为0.5毫米
    rx.Style.GridLines.All =  New prt.Linedef(0.1, Color.black)
    Dim icou As Integer
    rx.Width = 201
    rx.Style.Font = New Font("宋体", 9)
    rx.Style.TextAlignVert =prt.AlignVertEnum.Center
    Dim hd As Integer = tb.HeaderRows
    Dim cnt As Integer
    tb.CreateReportHeader(rx,True)
    rx.Cols.Insert(0) \'在左边插入一列,用于打印行号
    rx.Cols(0).Width = 8 \'设置行号列的宽度
    rx.Cells(0,0).SpanRows =2
    rx.Cells(0,0).Text = "№"
    For c As Integer = 0 To tb.Cols.Count - 1
        If tb.Cols(c).Visible
            For r As Integer = p * prs To math.min(tb.Rows.Count - 1,( p + 1) * prs - 1)
                rx.Rows(r - p * prs + hd).Height = 5.5
                rx.Cells(r - p * prs + hd, cnt+1).Text = tb.rows(r)(c)
                rx.Cells(r - p * prs + hd,0).text = r+1  \'
                rx.Cols(7).Style.Font = New Font("Times New Roman",9)
                rx.Cols(6).Style.Font = New Font("Times New Roman",9)
                rx.Cols(5).Style.Font = New Font("Times New Roman",9)
                rx.Cols(4).Style.Font = New Font("Times New Roman",9)
                rx.Cells(r - p * prs + hd,10).Text = "***"
                rx.Cells(r - p * prs + hd,9).Text = "***"
                rx.Cells(r - p * prs + hd,8).Text = Format(tb.rows(r)(7),"#,###,###")
                rx.Cells(r - p * prs + hd,7).Text =Format(tb.rows(r)(6),"#,###,###")
                rx.Cells(r - p * prs + hd,6).Text =Format(tb.rows(r)(5),"#,###,###")
                rx.Cells(r - p * prs + hd,5).Text =Format(tb.rows(r)(4),"#,###,###")
                rx.Cells(r - p * prs + hd,4).Style.TextAlignHorz =prt.AlignHorzEnum.Center
                rx.Cols(4).Width = 8
                rx.Cols(10).Width = 10
                rx.Cols(9).Width = 10
                rx.Cols(8).Width = 15
                rx.Cols(7).Width = 15
                rx.Cols(6).Width = 15
                rx.Cols(5).Width = 15
                rx.Cols(3).Width = 32
                rx.Cols(2).Width = 41
            Next
            If p = math.Ceiling(tb.Rows.Count / prs) - 1
                Dim i As Integer =tb.Rows.count - (math.Ceiling(tb.Rows.Count / prs) - 1)*15 \'取最后一页的行数
                rx.Cells(i+hd,0).text = "" \'
                rx.Rows(i+hd).Height = (15-i)*5.5
            ElseIf p < math.Ceiling(tb.Rows.Count / prs) - 1
                rx.BreakAfter = prt.BreakEnum.Page
            End If
            cnt = cnt+1
        End If
    Next
    doc.Body.Children.Add(rx)
Next
doc.Preview()

 


--  作者:晕了快扶我
--  发布时间:2013/3/12 14:15:00
--  

狐爸威武!

搞定!居然是这里...实在没注意到图片点击可在新窗口打开查看