Foxtable(狐表)用户栏目专家坐堂 → 根据s q l语句生产的datatable生产专业报表


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

主题:根据s q l语句生产的datatable生产专业报表

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/2 16:17:00 [显示全部帖子]


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/3 15:32:00 [显示全部帖子]

以下是引用as2565929355在2018/9/3 15:29:00的发言:
这个是内部表是可以的,我用的是 sele ct 语句生产的datatable 

 

sql语句生成的datatable,同样和2楼那样写代码。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/3 16:39:00 [显示全部帖子]

方法一:

 

Dim doc As New PrintDoc
Dim rt As New prt.RenderTable
Dim tb As DataTable = DataTables("订单")
Dim ColNames As String() = New String(){"产品", "客户","单价","折扣","数量","金额","日期"}
Dim MergeCols As Integer = 2 '指定要合并的列数
Dim drs = tb.Select("", "产品,客户") '根据合并列排序
rt.Width = "Auto"
rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded
rt.Style.TextAlignVert = prt.AlignVertEnum.Center
rt.RepeatGridLinesVert = True '换页后重复表格线
For c As Integer = 0 To ColNames.Length - 1
    Dim lr As Integer ' 用于保存合并区域的起始行
    rt.Cells(0,c).Text = ColNames(c)
    rt.Cells(0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center
    If tb.datacols(ColNames(c)).IsNumeric OrElse tb.datacols(ColNames(c)).IsDate Then
        rt.cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right
    End If
    For r As Integer = 0 To drs.Count - 1
        If c <= MergeCols - 1 Then '如果是要合并的列
            Dim Merge As Boolean = True
            If r = 0 Then
                Merge = False
            Else
                For n As Integer = 0 To c
                    If drs(r)(ColNames(n)) <> drs(r - 1)(ColNames(n))
                        Merge = False
                        Exit For
                    End If
                Next
            End If
            If Merge Then
                rt.Cells(lr,c).SpanRows = rt.Cells(lr,c).SpanRows + 1
            Else
                rt.Cells(r + 1, c).Text = drs(r)(ColNames(c))
                rt.Cells(r + 1, c).VertSplitBehavior = prt.CellSplitBehaviorEnum.Copy '换页后重复单元格
                lr = r + 1
            End If
        Else
            rt.Cells(r + 1, c).Text = drs(r)(ColNames(c))
        End If
    Next
Next
rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
rt.CellStyle.Spacing.All = 0.5
rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
doc.Body.Children.Add(rt)
doc.Preview()

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/3 16:40:00 [显示全部帖子]

方法二:你可以用一个table接收dt表格,如

 

e.form.controls("Table1").table.datasource = dt

 

然后用 Dim tb As Table = e.form.controls("Table1").table


 回到顶部