-- 作者:幸福地微笑
-- 发布时间: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编辑过]
|
-- 作者:幸福地微笑
-- 发布时间:2016/8/9 19:30:00
-- 回复:(大红袍)删除行,填充数据?Dim kemu...
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
9 这个结束的数值如何实现动态地根据“成绩记录”表中选择了指定“入学年份”的班级个数?或者是指定“入学年份”中的班号的最大值?
[此贴子已经被作者于2016/8/9 19:30:47编辑过]
|