以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]专业报表,分组打印排序 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=39125) |
-- 作者:annliu -- 发布时间:2013/8/16 7:55:00 -- [求助]专业报表,分组打印排序 分组打印 打印客户表,按地区分组打印,代码如下: Dim doc As New PrintDocDim 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.GetUniqueValues("","地区") 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()
这个是分组打印的范例。 我想问下在这个范例下,每个Region是怎样排序的,我希望它按照某一规则排序要怎么设置。 另外每个分组下的内容希望那个根据公司名称排序要怎么设置? |
-- 作者:Bin -- 发布时间:2013/8/16 8:38:00 -- LIst是可以排序的,如果你想按照你自定义规则排序那就麻烦了 list.Sort() 即可对该集合进行排序.
|
-- 作者:annliu -- 发布时间:2013/8/16 10:46:00 -- 谢谢你,第二个问题我找到办法了,在 Rows = tbl.Datatable.Select("[地区] = \'" & Region & "\'") 这行加个排序参数。 list(of String)的排序还没找到办法,请各位狐狸大侠指点。 |
-- 作者:Bin -- 发布时间:2013/8/16 10:48:00 -- 参考我2楼提供的函数可以按照字母排序 中文的话会按照首字母排序的. |
-- 作者:程兴刚 -- 发布时间:2013/8/16 13:38:00 -- list.Sort() 无法按照您的自定义顺序排序,就是按照您自己的在Select中加上排序参数,根据自定义排序列来实现!
|
-- 作者:有点甜 -- 发布时间:2013/8/16 20:40:00 -- 可以借助 dictionary 过度一下。具体代码楼主可以改一下。 Dim dic As New SortedDictionary(of Integer, String) dic.add(5, "广东") dic.add(6, "湛江") dic.add(1, "中国") For Each i As String In dic.Keys msgbox(i & " " & dic(i)) Next |