Foxtable(狐表)用户栏目专家坐堂 → 分组打印 怎么实现选择打印哪些列?并自定义设置列宽?


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

主题:分组打印 怎么实现选择打印哪些列?并自定义设置列宽?

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
分组打印 怎么实现选择打印哪些列?并自定义设置列宽?  发帖心情 Post By:2020/2/20 0:29: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
   
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()

[此贴子已经被作者于2020/2/20 10:25:35编辑过]

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


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/20 10:28:00 [只看该作者]

dim nms() as string = {"第一列","第三列"}
For c As integer = 0 To nms.length - 1
        
rt.Cells(0,c).Text = tbl.Cols(nms(c)).Name 
        rt.Cols(c).Width = tbl.Cols(nms(c)).PrintWidth
        For 
r As integer = 0 To Rows.Count -1 
            rt
.Cells(r + 1c).Text = rows(r)(tbl.Cols(nms(c)).Name
)
        Next
    Next

-----------------------
Dim Regions As List(Of String()) = tbl.DataTable.GetValues("地区|客户名称"
doc.Pagesetting.LandScape = True
For Each 
Region As String() In Regions
……
rx.Text = "地区: " & Region(0)
……
Rows = tbl.Datatable.Select("[地区] = '" & Region(0) & "' and 客户名称='" & Region(1) & "'")

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)dim nms() as string = {"第一列","第...  发帖心情 Post By:2020/2/22 16:50: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(0) & Region(1) & Region(2)
    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(0) & "' and 年级='" & Region(1) & "'and 班级='" & Region(2) & "'and 学生姓名='" & Region(3) & "'")
    Rows = tbl.DataTable.Select("[学校] = '" & Region(0) & "' and 年级='" & Region(1) & "'and 班级='" & Region(2) & "'")
    Dim nms() As String = {"学生姓名","亲属姓名","与学生关系","身份证号","联系电话","现居住地"}
    For c As Integer = 0 To nms.length - 1
        rt.Cells(0,c).Text = tbl.Cols(nms(c)).Name
        rt.Cols(c).Width = tbl.Cols(nms(c)).PrintWidth
        For r As Integer = 0 To Rows.Count -1
            rt.Cells(r + 1, c).Text = rows(r)(tbl.Cols(nms(c)).Name)
        Next
    Next
    
    rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
    doc.Body.Children.Add(rt)
Next
doc.preview()


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


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


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/22 17:12:00 [只看该作者]

上面的代码就是一个班级一张表的。如果只有一行是数据没有加载完整吧

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)上面的代码就是一个班级一张表的。如...  发帖心情 Post By:2020/2/22 17:33:00 [只看该作者]

通过下拉框选择对应的值  然后导入表到窗体表中
Dim tb1 As WinForm.Table = e.Form.Controls("Table1")
Dim c1 As WinForm.ComboBox = e.Form.Controls("选择表")
Dim cmd1 As New SQLCommand
Dim dt1 As DataTable
cmd1.C
cmd1.CommandText = "SEL ECT * From {" & c1.Value & "} "
dt1 = cmd1.ExecuteReader(True)
tb1.Table.DataSource  =dt1
Dim tab3 As WinForm.TabControl = e.Form.Controls("卡片管理")
tab3.SelectedPage.Text= "【" & c1.value & "】一览表"
_tablename=c1.Value.Trim()

经过一系列筛选操作后,窗体表只显示了一个年级一个班级的数据
新增一个按钮 代码事件如下  【没有打印窗体表中已经筛选出来的数据  而是打印了表中的所有数据,有没有办法限制只打印表中经过筛选后的数据呢?】
'Dim c1 As WinForm.ComboBox = e.Form.Controls("选择表")
'Dim tb1 As WinForm.Table = e.Form.Controls("Table1")
'With tb1.Table.PrintInfo
    '.Title = c1.Value
    '.PageFooter = "第[PageNo]页,共[PageCount]页"
    '.PageFooterLine = True
    '.PaperKind = 9
    '.FitIntoPage = True
'End With
'tb1.Table.Print(True,True)

Dim doc As New PrintDoc
Dim rt As Prt.RenderTable
Dim rx As prt.RenderText
Dim tbl As Table = Tables("学校数据管理_table1")
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(0) & Region(1) & Region(2)
    doc.Body.Children.Add(rx)
    rt = New prt.RenderTable
    rt.Style.Font = Tables("学校数据管理_table1").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(0) & "' and 年级='" & Region(1) & "'and 班级='" & Region(2) & "'and 学生姓名='" & Region(3) & "'")
    Rows = tbl.DataTable.Select("[学校] = '" & Region(0) & "' and 年级='" & Region(1) & "'and 班级='" & Region(2) & "'")
    Dim nms() As String = {"学生姓名","亲属姓名","与学生关系","身份证号","联系电话","现居住地"}
    For c As Integer = 0 To nms.length - 1
        rt.Cells(0,c).Text = tbl.Cols(nms(c)).Name
        rt.Cols(c).Width = tbl.Cols(nms(c)).PrintWidth
        For r As Integer = 0 To Rows.Count -1
            rt.Cells(r + 1, c).Text = rows(r)(tbl.Cols(nms(c)).Name)
        Next
    Next
    
    rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
    doc.Body.Children.Add(rt)
Next
doc.preview()

打印按钮代码运行后的效果,数据是全部加载的  但是显示不全

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


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


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/2/22 17:39:00 [只看该作者]

Dim Regions As List(Of String()) = tbl.DataTable.GetValues("学校|年级|班级",tbl.filter)

 回到顶部