以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  分组打印 怎么实现选择打印哪些列?并自定义设置列宽?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=146250)

--  作者:李孝春
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间: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) & "\'")

--  作者:李孝春
--  发布时间:2020/2/22 16:50:00
--  回复:(有点蓝)dim nms() as string = {"第一列","第...
代码如下,运行效果,是一个记录一行  不是想要的  我想实现的是

一个班级一张总表
分别按照学生姓名  分组  显示与该学生姓名相关的记录

然后再显示第二个班的

麻烦老师继续指导下  谢谢


代码如下:

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
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2020/2/22 17:12:00
--  
上面的代码就是一个班级一张表的。如果只有一行是数据没有加载完整吧
--  作者:李孝春
--  发布时间: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
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2020/2/22 17:39:00
--  
Dim Regions As List(Of String()) = tbl.DataTable.GetValues("学校|年级|班级",tbl.filter)