Foxtable(狐表)用户栏目专家坐堂 → [求助]如何分类统计答题错误信息


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

主题:[求助]如何分类统计答题错误信息

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/13 14:31:00 [显示全部帖子]

Dim dr As Row = Tables("客观题答案").Rows(0)
Dim lst1 As new List(of String)
Dim lst2 As new List(of String)
For Each r As Row In Tables("卷1答").Rows
    For Each c As Col In Tables("卷1答").Cols
        If r.IsNull(c.Name) Then Continue For
        If c.Name.StartsWith("客观题") Then
            
            lst1.Clear
            lst2.Clear
            Dim v As String = r(c.Name)
            For i As Integer = 0 To v.Length-1
                lst1.Add(v(i))
            Next
            v = dr(c.Name)
            For j As Integer = 0 To v.Length-1
                If lst1.Contains(v(j)) Then
                    lst1.Remove(v(j))
                Else
                    lst2.Add(v(j))
                End If
            Next
            lst1.AddRange(lst2.ToArray())
            For Each s As String In lst1
                Dim filter = "统计号 = '" & c.Name.Replace("客观题","") & s.ToUpper() & "'"
                Dim drt As DataRow = DataTables("卷1统").Find(filter)
                drt("错误人数") = drt("错误人数")+1
                drt("错误学生") = (drt("错误学生") & "," & r("姓名")).trimstart(",")
            Next
        ElseIf c.Name.StartsWith("主观题") Then
            If r(c.Name) = "F" Then
                Dim filter = "统计号 = '" & c.Name.Replace("观题","") &  "'"
                Dim drt As DataRow = DataTables("卷1统").Find(filter)
                drt("错误人数") = drt("错误人数")+1
                drt("错误学生") = (drt("错误学生") & "," & r("姓名")).trimstart(",")
            End If
        End If
    Next
Next

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/13 16:28:00 [显示全部帖子]

上传包含数据的完整例子

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/13 16:31:00 [显示全部帖子]

如果重复执行,先清空表的数据DataTables("卷1统").DeleteFor("")

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/13 17:14:00 [显示全部帖子]

2楼代码测试没有问题,结果和6楼项目数据一样。

代码放到命令行执行,或者写按钮事件执行,不能放到表事件中

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/15 9:32:00 [显示全部帖子]

“卷1答”DataColChanged事件

Dim dr As Row = Tables("客观题答案").Rows(0)
    Dim name = e.DataRow("姓名")
If e.DataCol.Name.StartsWith("客观题") Then
    Dim lst1 As new List(of String)
    Dim lst2 As new List(of String)
    Dim filter = " ','+ [错误学生] +',' like '%," & name & ",%' and 统计号 like '" & e.DataCol.Name.Replace("客观题","")  & "%'"
    Dim drs As List(Of DataRow) = DataTables("卷1统").Select(filter)
    For Each r As DataRow In drs
        r("错误人数") = r("错误人数")-1
        r("错误学生") = r("错误学生").replace(name,"").replace(",,",",").trim(",")
    Next
    Dim v As String
    If e.NewValue > "" Then
        v = e.NewValue
        For i As Integer = 0 To v.Length-1
            lst1.Add(v(i))
        Next
        v = dr(e.DataCol.Name)
        For j As Integer = 0 To v.Length-1
            If lst1.Contains(v(j)) Then
                lst1.Remove(v(j))
            Else
                lst2.Add(v(j))
            End If
        Next
        lst1.AddRange(lst2.ToArray())
        
        For Each s As String In lst1
            filter = "统计号 = '" & e.DataCol.Name.Replace("客观题","") & s.ToUpper() & "'"
            Dim drt As DataRow = DataTables("卷1统").Find(filter)
            drt("错误人数") = drt("错误人数")+1
            drt("错误学生") = (drt("错误学生") & "," & e.DataRow("姓名")).trimstart(",")
        Next
        
    End If
ElseIf e.DataCol.Name.StartsWith("主观题") Then
    Dim filter = " ','+ [错误学生] +',' like '%," & name & ",%' and 统计号 = '" & e.DataCol.Name.Replace("观题","") & "'"
    Dim drs As List(Of DataRow) = DataTables("卷1统").Select(filter)
    For Each r As DataRow In drs
        r("错误人数") = r("错误人数")-1
        r("错误学生") = r("错误学生").replace(name,"").replace(",,",",").trim(",")
    Next
    If e.NewValue = "f" Then
        filter = "统计号 = '" & e.DataCol.Name.Replace("观题","") &  "'"
        Dim drt As DataRow = DataTables("卷1统").Find(filter)
        drt("错误人数") = drt("错误人数")+1
        drt("错误学生") = (drt("错误学生") & "," & name).trimstart(",")
    End If
End If

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/16 8:48:00 [显示全部帖子]

查找某个客观题下是否有包含指定名称的条件,

如判断",a,ab,c,d,"是否包含a,可能把ab也找出来,判断是否包含“,a,”就不会找出ab


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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/19 10:14:00 [显示全部帖子]

重置列只对选定的列有效

这种类型的统计本就不应该在DataColChanged事件中做,应该输入完成所有数据后一个按钮进行全表统计

 回到顶部