Foxtable(狐表)用户栏目专家坐堂 → [求助]动态生成统计项目


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

主题:[求助]动态生成统计项目

帅哥哟,离线,有人找我吗?
幸福地微笑
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:71 积分:526 威望:0 精华:0 注册:2016/7/20 2:33:00
[求助]动态生成统计项目  发帖心情 Post By:2016/8/9 9:29:00 [只看该作者]

由于不同的年级的班数并不一致,能不能在筛选出年级统计数据后动态地生成相应的班级个数的行数,如2011年入学的有9个班,而2013年入学的有8个班,在选择2011年或2013年入学的数据后,统计的表中的只出现相应的班数的记录行。

 


图片点击可在新窗口打开查看此主题相关图片如下:年级统计.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/9 9:39:00 [只看该作者]

1、你代码怎么写的啊?

 

2、删除原来的行,重新填充啊 http://www.foxtable.com/webhelp/scr/0681.htm

 


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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/9 9:40:00 [只看该作者]

班号和年份如果有对应的,直接通过年份得出有几个班号

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


加好友 发短信
等级:幼狐 帖子:71 积分:526 威望:0 精华:0 注册:2016/7/20 2:33:00
  发帖心情 Post By:2016/8/9 17:47:00 [只看该作者]

我现在的做法是:

1、先建立了一个“年级考情查询”的表,表中已经固定地生成了9个班的行,在班号中填写好1-9

 

2、在窗口的控件中添加代码:

 

Dim kemu As WinForm.ComboBox = e.Form.Controls("科目")
For Each dr As DataRow In DataTables("年级考情分析").Select("")
    Dim dt As Table = Tables("成绩记录")
    Dim cks As List(Of String)
    cks = DataTables("年级考情分析").GetUniqueValues("参考人数 = 0","班号") 这一段如何改造能统计各个班中总分为0的科目个数?
    Dim cksm As String = 4 - cks.Count

    ' msgbox(cksm)
    If kemu.Text = "总分" Then
        dr("分布_40以下") = dt.Compute("Count(姓名)", kemu.Text & " < " & 40 * cksm  & " And 班号 = " & dr("班号") )
        dr("分布_40至60") = dt.Compute("Count(姓名)", kemu.Text & " >= " & 40 * cksm & " And " & kemu.Text & "< " & 60 * cksm & " And 班号 = " & dr("班号") )
        dr("分布_60分段") = dt.Compute("Count(姓名)", kemu.Text & " >= " & 60 * cksm & " And " & kemu.Text & "< " & 70 * cksm & " And 班号 = " & dr("班号") )
        dr("分布_70分段") = dt.Compute("Count(姓名)", kemu.Text & " >= " & 70 * cksm & " And " & kemu.Text & "< " & 80 * cksm & " And 班号 = " & dr("班号") )
        dr("分布_80分段") = dt.Compute("Count(姓名)", kemu.Text & " >= " & 80 * cksm & " And " & kemu.Text & "< " & 90 * cksm & " And 班号 = " & dr("班号") )
        dr("分布_90分段") = dt.Compute("Count(姓名)", kemu.Text & " >= " & 90 * cksm & " And " & kemu.Text & "< " & 100 * cksm & " And 班号 = " & dr("班号") )
        dr("分布_满分") = dt.Compute("Count(姓名)", kemu.Text & " >= " & 100 * cksm & " And 班号 = " & dr("班号") )
        Dim filter1 As String = "1=2"
        Dim filter2 As String = "1=2"
        Dim filter3 As String = "1=2"
        For Each cdr As DataRow In DataTables("分数线").DataRows
            filter1 = filter1 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " And " & kemu.Text & " >= " & cdr("优秀分数") * cksm &  " And 班号 = " & dr("班号")
            filter2 = filter2 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " And " & kemu.Text & " >= " & cdr("及格分数") * cksm &  " And 班号 = " & dr("班号")
            filter3 = filter3 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " And " & kemu.Text & " < " & cdr("差生分数") * cksm &  " And 班号 = " & dr("班号")

        Next
        dr("优秀人数") = dt.Compute("Count(姓名)", filter1 )
        dr("及格人数") = dt.Compute("Count(姓名)", filter2 )
        dr("差生人数") = dt.Compute("Count(姓名)", filter3 )
        dr("最高分") = dt.Compute("Max(" & kemu.Text & " )","班号 = " & dr("班号"))
        dr("最低分") = dt.Compute("Min(" & kemu.Text & " )","班号 = " & dr("班号"))
        dr("总分") = dt.Compute("Sum(" & kemu.Text & " )","班号 = " & dr("班号"))
        dr("平均分") = dt.Compute("Avg(" & kemu.Text & " )","班号 = " & dr("班号"))
    Else
        dr("分布_40以下") = dt.Compute("Count(姓名)", kemu.Text & " < 40 And 班号 = " & dr("班号") )
        dr("分布_40至60") = dt.Compute("Count(姓名)", kemu.Text & " >= 40 And " & kemu.Text & "< 60 And 班号 = " & dr("班号") )
        dr("分布_60分段") = dt.Compute("Count(姓名)", kemu.Text & " >= 60 And " & kemu.Text & "< 70 And 班号 = " & dr("班号") )
        dr("分布_70分段") = dt.Compute("Count(姓名)", kemu.Text & " >= 70 And " & kemu.Text & "< 80 And 班号 = " & dr("班号") )
        dr("分布_80分段") = dt.Compute("Count(姓名)", kemu.Text & " >= 80 And " & kemu.Text & "< 90 And 班号 = " & dr("班号") )
        dr("分布_90分段") = dt.Compute("Count(姓名)", kemu.Text & " >= 90 And " & kemu.Text & "< 100 And 班号 = " & dr("班号") )
        dr("分布_满分") = dt.Compute("Count(姓名)", kemu.Text & " >= 100 And 班号 = " & dr("班号") )
        Dim filter1 As String = "1=2"
        Dim filter2 As String = "1=2"
        Dim filter3 As String = "1=2"
        For Each cdr As DataRow In DataTables("分数线").DataRows
            filter1 = filter1 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " And " & kemu.Text & " >= " & cdr("优秀分数") &  " And 班号 = " & dr("班号")
            filter2 = filter2 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " And " & kemu.Text & " >= " & cdr("及格分数") &  " And 班号 = " & dr("班号")
            filter3 = filter3 & " or 入学年份 = " & Date.Today.Year - cdr("年级") + 1 & " And " & kemu.Text & " < " & cdr("差生分数") &  " And 班号 = " & dr("班号")
        Next
        'msgbox(filter1)
        dr("优秀人数") = dt.Compute("Count(姓名)", filter1)
        dr("及格人数") = dt.Compute("Count(姓名)", filter2)
        dr("差生人数") = dt.Compute("Count(姓名)", filter3)
        dr("最高分") = dt.Compute("Max(" & kemu.Text & " )","班号 = " & dr("班号"))
        dr("最低分") = dt.Compute("Min(" & kemu.Text & " )","班号 = " & dr("班号"))
        dr("总分") = dt.Compute("Sum(" & kemu.Text & ")","班号 = " & dr("班号"))
        dr("平均分") = dt.Compute("Avg(" & kemu.Text & ")","班号 = " & dr("班号"))
    End If
Next

 

改进想法:1、如果能动态地生成相应班数的统计,不用像现在这个预先设定班数就更好!或者以后会多于9个班那也是不用再手动修改!

              2、在统计科目为总分时,还不能正常地避开没有参考的科目

              3、有没有办法在生成各班的数据的情况下再增加一条记录是合计的?如下图

 


图片点击可在新窗口打开查看此主题相关图片如下:有合计效果.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/8/9 19:37:02编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/9 18:12:00 [只看该作者]

删除行,填充数据

 

Dim kemu As WinForm.ComboBox = e.Form.Controls("科目")

DataTables("年级考情分析").DataRows.Clear
For i As Integer = 1 to 9

    Dim dr As DataRow = DataTables("年级考情分析").AddNew

    dr("班号") = i

 

    '其余代码

Next



 回到顶部
帅哥哟,离线,有人找我吗?
幸福地微笑
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:71 积分:526 威望:0 精华:0 注册:2016/7/20 2:33:00
回复:(大红袍)删除行,填充数据?Dim kemu...  发帖心情 Post By:2016/8/9 19:30:00 [只看该作者]

Dim kemu As WinForm.ComboBox = e.Form.Controls("科目")

DataTables("年级考情分析").DataRows.Clear
For i As Integer = 1 to  

Dim dr As DataRow = DataTables("年级考情分析").AddNew

dr("班号") = i

'其余代码

Next

 

9 这个结束的数值如何实现动态地根据“成绩记录”表中选择了指定“入学年份”的班级个数?或者是指定“入学年份”中的班号的最大值?

[此贴子已经被作者于2016/8/9 19:30:47编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/9 20:30:00 [只看该作者]

Dim count As Integer = DataTables("某表").GetValues("班号", "条件")

 回到顶部