Foxtable(狐表)用户栏目专家坐堂 → 报表


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

主题:报表

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


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
报表  发帖心情 Post By:2016/12/21 15:37:00 [只看该作者]

e.Form.Controls("RadioButton1").Select()
Dim doc As New PrintDoc
Dim rt As Prt.RenderTable
Dim rx As prt.RenderText
Dim tbl As Table = Tables("统计_table1")
tbl.sort = "单位名称,考试名称,年级代码,班级,折总 desc"
Dim Rows As List(Of DataRow)
Dim Regions As List(Of String()) = tbl.DataTable.GetValues("考试名称|单位名称|年级代码|班级") ''''改后句子
Dim s As Integer = regions.Count
Dim rm As prt.RenderEmpty
Doc.PageSetting.LeftMargin = 5 '设置左边距
Doc.PageSetting.RightMargin = 5 '设置右边距
Doc.PageSetting.TopMargin = 5 '设置上边距
Doc.PageSetting.BottomMargin = 5 '设置下边距
For Each region As String() In Regions
    rm = new prt.RenderEmpty '定义一个新的空对象
    rm.BreakBefore = prt.BreakEnum.Page '打印前换页
    doc.Body.Children.Add(rm)
    rx = New prt.RenderText
    rx.Style.Font = New Font("黑体", 16, FontStyle.Bold) '
    rx.Style.FontBold = True
    rx.Style.Spacing.Bottom = 2
    rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center
    rx.Text =  Region(1) & Region(0) & Region(2) & "级" & Region(3) & "班成绩表"
    doc.Body.Children.Add(rx)
    rt = New prt.RenderTable
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center '垂直居中
    rt.Style.GridLines.All = New prt.LineDef(0.3,Color.black)
    rt.Width = "auto"
    rt.Style.Font = New Font("宋体", 8)
    Rows = tbl.DataTable.Select("[单位名称] = '" & region(1) & "'and [班级] ='" & region(3) &  "'and [年级代码] ='" & region(2) &  "'and [考试名称] ='" & region(0) &"'", "班序")
    For c As Integer = 6 To tbl.Cols.Count -1 '
        If tbl.Cols(c).Visible Then
            If c = 6
                rt.Cols(c-6).Width = 12
            Else
                rt.Cols(c-6).Width = 9
            End If
            
            If tbl.Cols(c).Name.Contains("_") Then
                Dim Values() As String
                Values = tbl.Cols(c).name.split("_")
                Dim s As String = values(0) & values(1)
                rt.Cells(0,c-6).Text = s
            Else
                rt.Cells(0,c-6).Text = tbl.Cols(c).Name
            End If
            Dim r As Integer
            For r = 0 To Rows.Count -1
                rt.Rows(0).Height = 5
                rt.Rows(r+1).height = 4
                rt.Cells(r+1,c-6).Text = rows(r)(tbl.Cols(c).Name)
            Next
            rt.Cells(r+1,0).Text = "班级平均"
            rt.Cells(r+2,0).Text = "学校平均"
            If "单位名称考试名称年级班级姓名班序校序".Contains(tbl.Cols(c).Name) = False Then
                rt.Rows(r+1).height = 6
                rt.Rows(r+2).height = 6
                
                rt.Cells(r+1,c-6).Text = format(tbl.DataTable.sqlCompute("Avg(" & tbl.Cols(c).Name & ")","[单位名称] = '" & region(1) & "'and [班级] ='" & region(3) &  "'and [年级代码] ='" & region(2) &  "'and [考试名称] ='" & region(0) & "'"),"#.00")
                rt.Cells(r+2,c-6).Text = format(tbl.DataTable.sqlCompute("Avg(" & tbl.Cols(c).Name & ")","[单位名称] = '" & region(1) & "'and [年级代码] ='" & region(2) &  "'and [考试名称] ='" & region(0) & "'"),"#.00")
            End If
        End If
    Next
    rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All
    doc.Body.Children.Add(rt)
Next
doc.preview()

老师,我想将班级平均改为全校的各班平均都列出来,学校平均放在最后,请问怎么改?

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/12/21 16:11:00 [只看该作者]

rt.Cells(r+3,c-6).Text = format(tbl.DataTable.sqlCompute("Avg(" & tbl.Cols(c).Name & ")","[单位名称] = '" & region(1) & "'  and [考试名称] ='" & region(0) & "'"),"#.00")

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


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2016/12/21 20:00:00 [只看该作者]

老师,你这个是不是把同单位考试名称,不分年级把成绩平均列在r+3行,我是想把同单位,同年级,同考试名称不同班级的平均排在明细表的后面,方便比较同次考试各班的平均,如一个年级有3个班,把3个班的各科成绩排在表尾,方便看总的结果,这样就打印每个班的平均成绩时都附有其他班的平均情况

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/12/21 20:16:00 [只看该作者]

 上传实例。

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/12/21 20:22:00 [只看该作者]

Dim ii As integer = 1

For each bj as string in tbl.DataTable.GetValues("班级", "[单位名称] = '" & region(1) & "' and [年级代码] ='" & region(2) &  "'and [考试名称] ='" & region(0) &"'", "班序")

    rt.Cells(r+2+i,c-6).Text = format(tbl.DataTable.sqlCompute("Avg(" & tbl.Cols(c).Name & ")","[单位名称] = '" & region(1) & "'and [年级代码] ='" & region(2) &  "'and [考试名称] ='" & region(0) & "' and [班级] = '" & bj & "'"),"#.00")

    ii += 1

next


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


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2016/12/22 8:39:00 [只看该作者]

  Dim ii As Integer = 1
                For Each bj As String In tbl.DataTable.sqlGetValues("班级", "[单位名称] = '" & region(1) & "' and [年级代码] ='" & region(2) &  "'and [考试名称] ='" & region(0) &"'", "班序")
                    rt.Cells(r+ii,c-6).Text = format(tbl.DataTable.sqlCompute("Avg(" & tbl.Cols(c).Name & ")","[单位名称] = '" & region(1) & "'and [年级代码] ='" & region(2) &  "'and [考试名称] ='" & region(0) & "' and [班级] = '" & bj & "'"),"#.00")
                    rt.Cells(r+1+ii,c-6).Text = format(tbl.DataTable.sqlCompute("Avg(" & tbl.Cols(c).Name & ")","[单位名称] = '" & region(1) & "'and [年级代码] ='" & region(2) &  "'and [考试名称] ='" & region(0) & "'"),"#.00")
                    rt.Cells(r+ii,0).Text = bj & "班平均"
                    rt.cells(r+1+ii,0).text = "年级平均"
                    rt.Rows(r+ii).height =5
                    rt.Rows(r+1+ii).height =6
                    ii += 1
                Next                       
老师改起了,学习到有很有用的东西,谢谢

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


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2016/12/22 8:43:00 [只看该作者]

请问如何判断表中某行至少有一列内容为空,用于做某记录的内容没填完,谢谢

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


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

循环所有列,逐个判断

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/12/22 9:04:00 [只看该作者]

以下是引用刘林在2016/12/22 8:43:00的发言:
请问如何判断表中某行至少有一列内容为空,用于做某记录的内容没填完,谢谢

 

For Each dc As DataCol In DataTables("表A").DataCols
    If Tables("表A").Current.IsNull(dc.name) Then
        msgbox(dc.name & " 为空")
    End If
Next


 回到顶部