以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  专业报表联打无法按选中打印如何处理?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=188944)

--  作者:lin98
--  发布时间:2023/11/1 18:36:00
--  专业报表联打无法按选中打印如何处理?
专业报表联打无法按选中打印如何处理?实例打印执行都打印全部,无法实现需求,按选中的数据打印
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:专业报表 - 连接打印问题.zip



--  作者:有点蓝
--  发布时间:2023/11/2 8:26:00
--  
代码本来就是按所有行打印的。如果要按鼠标拖选,参考:http://www.foxtable.com/webhelp/topics/1597.htm
--  作者:lin98
--  发布时间:2023/11/2 9:15:00
--  
\'选定区域的
With Tables("销售主表")
    If .TopPosition > -1 Then \'如果选定区域包括数据行
        For i As Integer = .TopPosition To .BottomPosition
            .Rows(i).Locked = True
        Next
    End If
End With


For Each pr As Row In tbl.Rows
加上上面代码,没有用,还是打印全部,如处理?

--  作者:有点蓝
--  发布时间:2023/11/2 10:08:00
--  
不要只会抄,能不能先理解一下帮助的代码?帮助是遍历锁定行的?

With Tables("销售主表")
    If .TopPosition > -1 Then \'如果选定区域包括数据行
        For i As Integer = .TopPosition To .BottomPosition
           原来遍历所有行的代码改为放到这里
        Next
    End If
End With

--  作者:lin98
--  发布时间:2023/11/2 10:39:00
--  
Dim doc As New Printdoc
Dim rx As prt.RenderText
Dim rt As prt.RenderTable
Dim Rows As List(Of DataRow)
Dim tbl As Table = Tables("销售主表")
Dim tb As Table = Tables("销售明细")

\'选定区域的
With Tables("销售主表")
    If .TopPosition > -1 Then \'如果选定区域包括数据行
        For i As Integer = .TopPosition To .BottomPosition
            Dim prs As Integer = 5
            Dim cols() As String = {"产品", "客户", "雇员", "单价", "折扣", "数量"}
            For Each pr As Row In tbl.Rows  
                Rows = tb.DataTable.select("客户=\'" & pr("公司名称") & "\'")
                For p As Integer = 0 To math.Ceiling(Rows.Count / prs) - 1 
                    rx = New prt.RenderText
                    \' \'
                    rx.Style.FontSize = 14
                    rx.Style.FontBold = True
                    rx.Style.Spacing.Bottom = 5
                    rx.Text = "公司名称: " & pr("公司名称") & " - " & (p + 1)
                    doc.Body.Children.Add(rx)
  
                    rt = New prt.RenderTable
                    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center
                    rt.Style.TextAlignVert = prt.AlignVertEnum.Center
                    rt.Style.Borders.Bottom = New prt.LineDef(0.3, Color.LightGray)
                    rt.CellStyle.Spacing.All = 1
                    rt.Cols.Count = 4
                    For j As Integer = 0 To cols.Length - 1 \'打印标题
                        rt.Cells(0, j).Text = cols(j)
                    Next
                    rt.Cols(1).Width = 60 \'指定
                    rt.rows(0).Style.Borders.Top = New prt.LineDef(1, Color.LightGray)
                    rt.rows(0).Style.Borders.Bottom = New prt.LineDef(1, Color.LightGray)
                    Dim sum As Double = 0
                    For r As Integer = p * prs To math.min(Rows.Count - 1, ( p + 1) * prs - 1)
                        
                        sum += rows(r)("数量") \'
                        For j As Integer = 0 To cols.Length - 1
                            rt.Cells(r - p * prs + 1, j).Text = rows(r)(cols(j))
                            
                        Next
                    Next
                    If p = math.Ceiling(Rows.Count / prs) - 1 Then\'
                        For r As Integer = Rows.Count To ( p + 1) * prs - 1 \'
  
                            rt.Rows.Count = rt.Rows.Count + 1
                            rt.Rows(rt.Rows.count - 1)(0).text = " "
                        Next
                    End If
                    Dim cnt = rt.Rows.Count
                    
                    doc.Body.Children.Add(rt)
                    
                    rx = New prt.RenderText
                    rx.Style.FontBold = True
                    rx.Style.Spacing.Top = 3
                    rx.Text = "销售明细数目: " & Rows.Count
                    rx.Style.TextAlignHorz = prt.AlignHorzEnum.Right
                    rx.BreakAfter = prt.BreakEnum.Page \'否则换页
                    doc.Body.Children.Add(rx)
                Next
                
            Next 
        Next
    End If
End With

doc.Preview

我还是没搞定,请帮忙,谢谢

--  作者:有点蓝
--  发布时间:2023/11/2 10:44:00
--  
把下面代码去掉
For Each pr As Row In tbl.Rows  

--  作者:lin98
--  发布时间:2023/11/2 10:48:00
--  
去掉报错pr未声明
--  作者:有点蓝
--  发布时间:2023/11/2 10:51:00
--  
写代码,建议还是要努力理解代码,不然连自己写的代码都看不懂,更不用说改进了

For i As Integer = .TopPosition To .BottomPosition
dim pr as row = .rows(i)

--  作者:lin98
--  发布时间:2023/11/2 11:14:00
--  
改后,都会多生成一页空页,如何处理?
--  作者:有点蓝
--  发布时间:2023/11/2 11:26:00
--  
把换页的代码放到生成数据前面