Foxtable(狐表)用户栏目专家坐堂 → 转置后的临时表怎么用


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

主题:转置后的临时表怎么用

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


加好友 发短信
等级:超级版主 帖子:23372 积分:119198 威望:0 精华:7 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/11/5 22:32:00 [只看该作者]

Dim g As New CrossTableBuilder("成绩转置1", DataTables("成绩登记表"))
g.HGroups.AddDef("考试期数")
g.HGroups.AddDef("年级")
g.HGroups.AddDef("班级")
g.HGroups.AddDef("学号")
g.HGroups.AddDef("姓名")
g.VGroups.AddDef("课程名称")
g.Totals.AddDef("分数", "分数")
g.HorizontalTotal = True
g.Build()
MainTable = Tables("成绩转置1")
Tables("成绩转置1").grid.Cols("合计").caption = "总分"
Dim dic As new Dictionary(of String, String)
For Each c As Col In Tables("成绩转置1").cols
    dic.add(c.caption, c.name)
Next
'---------------------------------
Dim fsd As New List(of Integer)



For Each r1 As Row In Tables("自定义统计分数段").Rows
    
    If r1.Checked = False Then
        MessageBox.Show("请定义统计分数段,并把无用的数据删除,否则系统将无法统计运行","提示")
        Return 
    Else
        If r1.Checked Then
            fsd.add(r1("分数段"))
        End If
    End If
    
Next
If fsd.count> 0 Then
    fsd.sort
    Dim dtb As New DataTableBuilder("统计")
    dtb.AddDef("考试期数", Gettype(String))
    dtb.AddDef("年级", Gettype(String))
    dtb.AddDef("班级", Gettype(String))
    dtb.AddDef("科目", Gettype(String), 32)
    For Each fs As Integer In fsd
        dtb.AddDef(fs & "分" & iif(fs = fsd(0), "以下","以上") , Gettype(Integer))
    Next
    dtb.Build()
End If

Dim flt As String
Dim dt As DataTable =DataTables("成绩转置1")
Dim t1 As Table =Tables("统计")
t1.StopRedraw

'Dim bjs As List(of String) = dt.Getvalues("年级|班级|考试期数")
'dt.GetUniqueValues
'For Each flt In bjs
'Dim f As New Filler
'f.SourceTable =DataTables("科目表")
'f.DataTable = t1.DataTable
'f.Fill()
't1.DataTable.ReplaceFor("考试期数",flt,"考试期数 Is null")
't1.DataTable.ReplaceFor("班级",flt,"班级 Is null")
't1.DataTable.ReplaceFor("年级",flt,"年级 Is null")
'Next
Dim bjs As List(of String()) = dt.Getvalues("年级|班级|考试期数")
For Each bj As String() In bjs
    Dim f As New Filler
    f.SourceTable =DataTables("科目表")
    f.DataTable = t1.DataTable
    f.Fill()
    t1.DataTable.ReplaceFor("考试期数",bj(2),"考试期数 Is null")
    t1.DataTable.ReplaceFor("班级",bj(1),"班级 Is null")
    t1.DataTable.ReplaceFor("年级",bj(0),"年级 Is null")
Next


For Each dc As Col In t1.Cols
    If dc.Index > 1 Then
        For Each dr As Row In t1.Rows
            flt = "班级 = '" & dr("班级") & "' and 年级 = '" & dr("年级") & "' and 考试期数 = '" & dr("考试期数") & "'And " & dic(dr("科目"))
            If dc.Index = 4 Then
                flt+ = " < "  &  dc.name.split("分")(0)
            ElseIf dc.Index =Tables("统计").Cols.count -1 Then
                flt+ = " >= "  &  dc.name.split("分")(0)
            ElseIf dc.Index > 4
                flt+ = " >= " &  dc.name.split("分")(0) & " And " & dic(dr("科目")) & " < " & t1.Cols(dc.Index+1).Name.split("分")(0)
            Else
                Continue For
            End If
            dr(dc.name) =dt.Compute("Count(姓名)",flt)
        Next
    End If
Next

t1.DataTable.SysStyles("EmptyArea").BackColor = Color.White
t1.ResumeRedraw
MainTable = t1
Tables("统计_Table2").DataSource = DataTables("统计")

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


加好友 发短信
等级:三尾狐 帖子:607 积分:4241 威望:0 精华:0 注册:2015/7/25 19:14:00
  发帖心情 Post By:2018/11/5 23:50:00 [只看该作者]

非常棒,蓝老师。

除了“xx分以下”和“xx分以上”,其他的字段写成xx分至xx分,不知道怎么合成,请求帮忙


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


加好友 发短信
等级:版主 帖子:72502 积分:363620 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/6 9:06:00 [只看该作者]

Dim g As New CrossTableBuilder("成绩转置1", DataTables("成绩登记表"))
g.HGroups.AddDef("考试期数")
g.HGroups.AddDef("年级")
g.HGroups.AddDef("班级")
g.HGroups.AddDef("学号")
g.HGroups.AddDef("姓名")
g.VGroups.AddDef("课程名称")
g.Totals.AddDef("分数", "分数")
g.HorizontalTotal = True
g.Build()
MainTable = Tables("成绩转置1")
Tables("成绩转置1").grid.Cols("合计").caption = "总分"
Dim dic As new Dictionary(of String, String)
For Each c As Col In Tables("成绩转置1").cols
    dic.add(c.caption, c.name)
Next
'---------------------------------
Dim fsd As New List(of Integer)

 

 


For Each r1 As Row In Tables("自定义统计分数段").Rows
   
    If r1.Checked = False Then
        MessageBox.Show("请定义统计分数段,并把无用的数据删除,否则系统将无法统计运行","提示")
        Return
    Else
        If r1.Checked Then
            fsd.add(r1("分数段"))
        End If
    End If
   
Next
If fsd.count> 0 Then
    fsd.sort
    Dim dtb As New DataTableBuilder("统计")
    dtb.AddDef("考试期数", Gettype(String))
    dtb.AddDef("年级", Gettype(String))
    dtb.AddDef("班级", Gettype(String))
    dtb.AddDef("科目", Gettype(String), 32)
    If fsd.count = 1 Then
        dtb.AddDef(fsd(0) & "分以下", Gettype(Integer))
        dtb.AddDef(fsd(0) & "分以上", Gettype(Integer))
    ElseIf fsd.count >= 2 Then
        dtb.AddDef(fsd(0) & "分以下", Gettype(Integer))
        For fs As Integer = 0 To fsd.count-2
            dtb.AddDef(fsd(fs) & "分-" & fsd(fs+1) & "分", Gettype(Integer))
        Next
        dtb.AddDef(fsd(fsd.count-1) & "分以上", Gettype(Integer))
    End If
    dtb.Build()
End If


Dim flt As String
Dim dt As DataTable =DataTables("成绩转置1")
Dim t1 As Table =Tables("统计")
t1.StopRedraw


'Dim bjs As List(of String) = dt.Getvalues("年级|班级|考试期数")
'dt.GetUniqueValues
'For Each flt In bjs
'Dim f As New Filler
'f.SourceTable =DataTables("科目表")
'f.DataTable = t1.DataTable
'f.Fill()
't1.DataTable.ReplaceFor("考试期数",flt,"考试期数 Is null")
't1.DataTable.ReplaceFor("班级",flt,"班级 Is null")
't1.DataTable.ReplaceFor("年级",flt,"年级 Is null")
'Next
Dim bjs As List(of String()) = dt.Getvalues("年级|班级|考试期数")
For Each bj As String() In bjs
    Dim f As New Filler
    f.SourceTable =DataTables("科目表")
    f.DataTable = t1.DataTable
    f.Fill()
    t1.DataTable.ReplaceFor("考试期数",bj(2),"考试期数 Is null")
    t1.DataTable.ReplaceFor("班级",bj(1),"班级 Is null")
    t1.DataTable.ReplaceFor("年级",bj(0),"年级 Is null")
Next

 


For Each dc As Col In t1.Cols
    If dc.Index > 1 Then
        For Each dr As Row In t1.Rows
            flt = "班级 = '" & dr("班级") & "' and 年级 = '" & dr("年级") & "' and 考试期数 = '" & dr("考试期数") & "'And " & dic(dr("科目"))
            If dc.Index = 4 Then
                flt+ = " < "  &  dc.name.split("分")(0)
            ElseIf dc.Index =Tables("统计").Cols.count -1 Then
                flt+ = " >= "  &  dc.name.split("分")(0)
            ElseIf dc.Index > 4
                flt+ = " >= " &  dc.name.split("分")(0) & " And " & dic(dr("科目")) & " < " & dc.Name.split("-")(1).split("分")(0)
            Else
                Continue For
            End If
            dr(dc.name) =dt.Compute("Count(姓名)",flt)
        Next
    End If
Next


t1.DataTable.SysStyles("EmptyArea").BackColor = Color.White
t1.ResumeRedraw
MainTable = t1
Tables("统计_Table2").DataSource = DataTables("统计")


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


加好友 发短信
等级:三尾狐 帖子:607 积分:4241 威望:0 精华:0 注册:2015/7/25 19:14:00
  发帖心情 Post By:2018/11/7 20:50:00 [只看该作者]

这段代码怎么修改,可以用的快项目当中,即把排名和分数表示在图中

方便看出学生成绩分数和排名的变化曲线。还有几张表,也可以做成图标,不知如何下手。

帮助文件看了,照葫芦画瓢还是做不出。

 

 
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20181107203718.png
图片点击可在新窗口打开查看

 

Dim Chart As WinForm.Chart '定义一个图表变量
Dim Series As WinForm.ChartSeries '定义一个图系变量
Chart= e.Form.Controls("Chart1") ' 引用窗口中的图表
Chart.SeriesList.Clear() '清除图表原来的图系
For Each Year As String In DataTables("统计表1").GetValues("年")
    Series = Chart.SeriesList.Add() '每年一个图系
    Series.Text = Year  '指定图系名称为年份
    Series.Length = 12  '指定图系的数据点数,1年12个月
    Chart.AxisX.Min = 1  '指定X轴的最小值,也就是从1月开始
    Chart.AxisX.Max = 12 ''指定X轴的最大值,一年只有12个月
    For Month As Integer = 1 To 12 '逐月设置坐标
        Series.X(Month-1) = Month      '指定水平坐标为月份
        Dim r As DataRow = DataTables("统计表1").Find("年 = " & Year & " And  月 = " & Month)'找出对应年月的行
        If r IsNot Nothing '如果找到对应年月的行
            Series.Y(Month-1) = r("数量") '指定数量作为垂直坐标
        End If
    Next
Next

 

 



 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成绩管理试做.table

[此贴子已经被作者于2018/11/7 20:50:47编辑过]

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


加好友 发短信
等级:版主 帖子:72502 积分:363620 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/7 22:02:00 [只看该作者]

参考

 

Dim chart As WinForm.Chart = Forms("统计").Controls("Chart1")
Dim tb As WinForm.Table = Forms("统计").Controls("Table2")
Dim Series As WinForm.ChartSeries '定义一个图系变量
Chart.VisualEffect = False '加上这一行,让你的图表更漂亮
Chart.AxisX.ClearValueLabel
Chart.ChartType = ChartTypeEnum.Bar '图表类型该为Bar(条形)
Chart.DataSource = tb.Table.name '设置绑定表
Chart.SeriesList.Clear() '清除图表原来的图系
Series = Chart.SeriesList.Add() '增加第一个图系
Series.Text = "化学_分数"
Series.X.DataField = "姓名" 'X轴绑定到产品列
Series.Y.DataField = "分数_1" 'Y轴绑定到数量列

Chart.ChartType2 = ChartTypeEnum.XYPlot '图表2类型该为线形
Chart.SeriesList2.Clear() '清除图表原来的图系
Series = Chart.SeriesList2.Add() '给图表2增加一个图系
Series.Text = "化学_排名"
Series.X.DataField = "姓名" 'X轴绑定到产品列
Series.Y.DataField = "排名_1" 'Y轴绑定到数量列
Chart.LegendVisible = True '显示图列
Chart.LegendCompass= CompassEnum.South '图列显示在南方(底端)

 

请,自己,先把chart图表全部学完。

 

http://www.foxtable.com/webhelp/scr/0966.htm

 


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


加好友 发短信
等级:三尾狐 帖子:607 积分:4241 威望:0 精华:0 注册:2015/7/25 19:14:00
  发帖心情 Post By:2018/11/7 22:58:00 [只看该作者]

甜老师,目前chart图表还没有好好学,只是照模学样。

你的代码不能用,没反应


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


加好友 发短信
等级:版主 帖子:72502 积分:363620 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/7 22:59:00 [只看该作者]

把chart里面的实例,全部做一次

 

http://www.foxtable.com/webhelp/scr/0966.htm

 


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


加好友 发短信
等级:三尾狐 帖子:607 积分:4241 威望:0 精华:0 注册:2015/7/25 19:14:00
  发帖心情 Post By:2018/11/8 22:57:00 [只看该作者]

图标按照下面的代码可以显示,我想只要查询个人成绩情况的图表结果?

 

Dim tb As WinForm.Chart = e.Form.Controls("Chart1")
Dim ts As WinForm.ChartSeries
'Dim TextBox1 As WinForm.TextBox = Forms("统计").Controls("TextBox1")
'Tables("统计_Table2").Filter = "( 姓名='" & TextBox1.Text & "')"
tb.DataSource = "成绩排名表"
tb.SeriesList.Clear() '清除图表原来的图系
ts = tb.serieslist.add()
'tb.VisualEffect = True

ts.x.DataField = ("考试期数")
ts.y.DataField = ("合计_分数")


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


加好友 发短信
等级:版主 帖子:72502 积分:363620 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/8 23:05:00 [只看该作者]

1、查找find或者select到对应数据;

 

2、然后给图表赋值 (方法二)

 

http://www.foxtable.com/webhelp/scr/0968.htm

 


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


加好友 发短信
等级:三尾狐 帖子:607 积分:4241 威望:0 精华:0 注册:2015/7/25 19:14:00
  发帖心情 Post By:2018/11/8 23:11:00 [只看该作者]

这样写,问题出在哪里

Dim tb As WinForm.Chart = e.Form.Controls("Chart1")
Dim ts As WinForm.ChartSeries
Dim TextBox1 As WinForm.TextBox = Forms("统计").Controls("TextBox1")

tb.DataSource =Tables("统计_Table2").Filter= "( 姓名='" & TextBox1.Text & "')"

 tb.SeriesList.Clear() '清除图表原来的图系
ts = tb.serieslist.add()
'tb.VisualEffect = True

ts.x.DataField = ("考试期数")
ts.y.DataField = ("合计_分数")


 回到顶部
总数 96 上一页 1 2 3 4 5 6 7 8 9 10 下一页