Foxtable(狐表)用户栏目专家坐堂 → [求助]专业报表,分组打印排序


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

主题:[求助]专业报表,分组打印排序

美女呀,离线,留言给我吧!
annliu
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:28 积分:291 威望:0 精华:0 注册:2011/12/16 17:00:00
[求助]专业报表,分组打印排序  发帖心情 Post By:2013/8/16 7:55: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.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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/8/16 8:38:00 [只看该作者]

LIst是可以排序的,如果你想按照你自定义规则排序那就麻烦了

list.Sort()

即可对该集合进行排序.

 回到顶部
美女呀,离线,留言给我吧!
annliu
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:28 积分:291 威望:0 精华:0 注册:2011/12/16 17:00:00
  发帖心情 Post By:2013/8/16 10:46:00 [只看该作者]

谢谢你,第二个问题我找到办法了,在 Rows = tbl.Datatable.Select("[地区] = '" & Region & "'") 这行加个排序参数。

list(of String)的排序还没找到办法,请各位狐狸大侠指点。


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/8/16 10:48:00 [只看该作者]

参考我2楼提供的函数可以按照字母排序 中文的话会按照首字母排序的.

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2013/8/16 13:38:00 [只看该作者]

list.Sort()
无法按照您的自定义顺序排序,就是按照您自己的在Select中加上排序参数,根据自定义排序列来实现!

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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

 回到顶部