以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教分页码打印  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=134809)

--  作者:hopestarxia
--  发布时间:2019/5/9 23:11:00
--  请教分页码打印
老师,制作了一个窗口,窗口里有TABLE1插件,插件为SQL查询表,内容为业务员销售明细表。已按业务员名称进行排序。
现在想实现打印,打印时自动按业务员自动分页打印,如果一个业务员的数据太多时,那么当每页打到40行时再自动换页打印,请问有什么参考资料如何实现?

--  作者:有点甜
--  发布时间:2019/5/10 9:22:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/1235.htm

 

http://www.foxtable.com/webhelp/scr/1196.htm


--  作者:hopestarxia
--  发布时间:2019/5/11 0:39:00
--  
谢谢老师!
--  作者:hopestarxia
--  发布时间:2019/5/13 16:27:00
--  
老师,这个是分组打印了,我照着这个研究,还是没能实现分页打印,我想在不是相同的仓库了的时候,则自动实现换页。
--  作者:有点甜
--  发布时间:2019/5/13 16:40:00
--  
以下是引用hopestarxia在2019/5/13 16:27: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
    Dim rm = new prt.RenderEmpty \'定义一个新的空对象
    rm.BreakBefore = prt.BreakEnum.Page \'打印前换页
    doc.Body.Children.Add(rm) \'加入到报表中

    rx = New prt.RenderText
    rx.Style.FontSize = 14
    rx.Style.FontBold = True
    rx.Style.Spacing.Bottom = 2
    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 & "\'")
    For c As Integer = 0 To tbl.Cols.Count - 1
        rt.Cells(0,c).Text = tbl.Cols(c).Name
        rt.Cols(c).Width = tbl.Cols(c).PrintWidth
        For r As Integer = 0 To Rows.Count -1
            rt.Cells(r + 1, c).Text = rows(r)(tbl.Cols(c).Name)
        Next
    Next
    rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
    doc.Body.Children.Add(rt)
Next
doc.preview()


--  作者:hopestarxia
--  发布时间:2019/5/13 17:31:00
--  
老师,用你教的代码实现了不同仓库的分页打印。
但是这样把我原来设置的打印纸张大于,定于每张打多少行,以及每页的标题及每页下面的其他内容都没有了。原来定义的样式没有了。
我看帮助里说的强制换页,我这个有没有办法用强制换页的代码解决?

--  作者:有点甜
--  发布时间:2019/5/13 17:45:00
--  
以下是引用hopestarxia在2019/5/13 17:31:00的发言:
 
但是这样把我原来设置的打印纸张大于,定于每张打多少行,以及每页的标题及每页下面的其他内容都没有了。原来定义的样式没有了。
 

 

1、如果要分组,又要限定每页打印多少行,请把强制换页的代码,写到分组的循环里面去;

 

2、每页的顶部、底部内容,是页眉页脚 http://www.foxtable.com/webhelp/scr/1197.htm

 


--  作者:hopestarxia
--  发布时间:2019/5/13 17:52:00
--  
老师,你看一下我用如下代码

Dim t As Table = e.Form.Controls("Table1").Table
Dim ps As Integer = Math.Ceiling(t.Rows.count / 16)
For i As Integer = 1 To ps
    Dim idxs As String = ""
    t.Filter = ""
    For j As Integer = (i-1)*16 To i*16-1
        If j >= t.Rows.count Then
            Exit For
        End If
        idxs &= "\'" & t.Rows(j)("仓库名称") & "\',"
    Next
    t.Filter = "仓库名称  in (" & idxs.trim(",") & ")"
   
    Dim doc As PrintDoc = e.Form.GernatePrintDoc()
    doc.Preview()
Next
t.Filter = ""
怎么调整能有希望实现,我感觉这个比较接近能实现我的需求了。

--  作者:有点甜
--  发布时间:2019/5/13 18:05:00
--  


Dim t As Table = e.Form.Controls("Table1").Table
For Each ck As String In t.DataTable.GetValues("仓库名称")
    Dim drs = t.DataTable.Select("仓库名称=\'" & ck & "\'")
    Dim ps As Integer = Math.Ceiling(drs.count / 16)
    For i As Integer = 1 To ps
        Dim idxs As String = ""
        t.Filter = ""
        For j As Integer = (i-1)*16 To i*16-1
            If j >= drs.count Then
                Exit For
            End If
            idxs &= "\'" & drs(j)("_Identify") & "\',"
        Next
        t.Filter = "_Identify  in (" & idxs.trim(",") & ")"
       
        Dim doc As PrintDoc = e.Form.GernatePrintDoc()
        doc.Preview()
    Next
Next


--  作者:hopestarxia
--  发布时间:2019/5/13 18:30:00
--  
谢谢老师,用老师的代码可以了。需要学习的地方还太多啊。