以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何按天数进行分别求值?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=68776)

--  作者:hrw68529
--  发布时间:2015/5/25 8:49:00
--  [求助]如何按天数进行分别求值?
下边一段代码,分2天进行,每天的成绩分别求面试室平均值,加权平均值,加权系数,现在是2天一起,如何修改代码,请指教
If e.DataCol.name="天数" OrElse e.DataCol.name="面试室"  Then
    If e.DataRow.IsNull("天数")=False AndAlso e.DataRow.IsNull("面试室")=False  Then
        Dim zgf1, zgf2, zdf1, zdf2 As Double
        Dim drs As List(Of DataRow) = DataTables("笔试成绩").Select("天数=\'" & e.DataRow("天数") & "\' and 面试室=\'" & e.DataRow("面试室") & "\'And 本场面试成绩 Is Not Null", "本场面试成绩")
        zgf1 = drs(drs.Count-1)("本场面试成绩")
        zgf2 = drs(drs.Count-2)("本场面试成绩")
        zdf1 = drs(0)("本场面试成绩")
        zdf2 = drs(1)("本场面试成绩")
        Dim sum As Double = DataTables("笔试成绩").Compute("sum(本场面试成绩)","天数=\'" & e.DataRow("天数") & "\' and 面试室=\'" & e.DataRow("面试室") & "\'")
        e.DataRow("面试室平均值") = Format((sum - zgf1 - zgf2 - zdf1 - zdf2) /( drs.Count - 4),"0.0000")
        e.DataRow("加权平均值") = Format(e.DataTable.Compute("avg(面试室平均值)"),"0.0000")
        e.DataRow("加权系数") = Format(e.DataRow("加权平均值")/e.DataRow("面试室平均值"),"0.0000")
        e.DataRow("计数") = DataTables("笔试成绩").Compute("Count(总成绩)","天数 = \'" & e.DataRow("天数") & "\' and 面试室 = \'" & e.DataRow("面试室") & "\'")
        
    End If
Else If e.DataCol.Name = "面试室平均值" Then
    For Each dr As DataRow In e.DataTable.DataRows      
        dr("加权平均值") = Format(e.DataTable.Compute("avg(面试室平均值)"),"0.0000")
    Next
    e.DataRow("加权系数") = Format(e.DataRow("加权平均值") / e.DataRow("面试室平均值"),"0.0000")
End If

--  作者:hrw68529
--  发布时间:2015/5/25 9:03:00
--  
dr("加权平均值") = Format(e.DataTable.Compute("avg(面试室平均值)"),"0.0000")
这一句怎么改??????

--  作者:大红袍
--  发布时间:2015/5/25 9:15:00
--  

 dr("加权平均值") = Format(e.DataTable.Compute("avg(面试室平均值)", "天数=\'" & e.DataRow("天数") & "\'"),"0.0000")

 


--  作者:大红袍
--  发布时间:2015/5/25 9:15:00
--  
问问题,请上传具体例子。
--  作者:hrw68529
--  发布时间:2015/5/25 9:53:00
--  
上例子:在加树计算表属性中,请修改。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:面试登分系统_201505250952.zip



--  作者:hrw68529
--  发布时间:2015/5/25 9:54:00
--  
加权计算表属性中修改,现在是不能按天进行计算,
--  作者:大红袍
--  发布时间:2015/5/25 10:02:00
--  
 数据库发上来,同时说明怎么计算。
[此贴子已经被作者于2015/5/25 10:02:25编辑过]

--  作者:hrw68529
--  发布时间:2015/5/25 10:14:00
--  
数据库:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:数据库.zip
计算数据:
(1)面试室平均值:按天数、按面试室分别去掉2个最高分,去掉2个最低分,然后计算每个面试室剩下人员的“面试室平均值”;

(2)加权平均值:按天,计算出“面试室平均值”的平均值;
(2)加权系数:按天,将“加权平均值”除以“面试室平均值”


--  作者:大红袍
--  发布时间:2015/5/25 10:38:00
--  

思路有问题,不要在Datacolchanged事件计算。

 

你这样适合直接填充后计算,做个按钮

 

systemReady = False
Dim f As New Filler
f.SourceTable = DataTables("笔试成绩") \'指定数据来源
f.SourceCols = "天数,分组,面试室,是否加权" \'指定数据来源列
f.DataTable = DataTables("加权计算") \'指定数据接收表
f.DataCols = "天数,分组,面试室,是否加权" \'指定数据接收列
f.Filter = "是否加权 = true"
f.ExcludeExistValue = True
f.Fill() \'填充数据

Dim zgf1, zgf2, zdf1, zdf2 As Double
Dim dt As DataTable = DataTables("加权计算")
For Each dr As DataRow In dt.DataRows
    Dim drs As List(Of DataRow) = DataTables("笔试成绩").Select("天数=\'" & dr("天数") & "\' and 面试室=\'" & dr("面试室") & "\'And 本场面试成绩 Is Not Null", "本场面试成绩")
    zgf1 = drs(drs.Count-1)("本场面试成绩")
    zgf2 = drs(drs.Count-2)("本场面试成绩")
    zdf1 = drs(0)("本场面试成绩")
    zdf2 = drs(1)("本场面试成绩")
    Dim sum As Double = DataTables("笔试成绩").Compute("sum(本场面试成绩)","天数=\'" & dr("天数") & "\' and 面试室=\'" & dr("面试室") & "\'")
    dr("面试室平均值") = Format((sum - zgf1 - zgf2 - zdf1 - zdf2) /( drs.Count - 4),"0.0000")
    dr("计数") = DataTables("笔试成绩").Compute("Count(总成绩)","天数 = \'" & dr("天数") & "\' and 面试室 = \'" & dr("面试室") & "\'")
Next
For Each dr As DataRow In dt.DataRows
    dr("加权平均值") = Format(dt.Compute("avg(面试室平均值)", "天数=\'" & dr("天数") & "\'"),"0.0000")
    dr("加权系数") = Format(dr("加权平均值")/dr("面试室平均值"),"0.0000")
Next
systemReady = True


--  作者:hrw68529
--  发布时间:2015/5/25 11:02:00
--  
按你所讲,把代码复制进去后,出现以下情况,

图片点击可在新窗口打开查看此主题相关图片如下:截图00.jpg
图片点击可在新窗口打开查看