以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  排名代码错误提醒,重置列为什么没有刷新  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=151166)

--  作者:天宇科技
--  发布时间:2020/6/16 22:34:00
--  排名代码错误提醒,重置列为什么没有刷新
排名代码,提示:找不到“初中地理”,为什么会有这个提醒呢,报考学科 列中有初中地理。

Tables("成绩册").StopRedraw
Dim bjs As List(Of String) = DataTables("成绩册").GetValues("报考学科")
For Each bj As String In bjs
    \'获得该班级的全部行,按总分降序排序
    Dim drs As List(Of DataRow) = DataTables("成绩册").Select("[报考学科] = " & bj, "总成绩 DESC")
    For n As Integer = 0 To drs.Count - 1 \'遍历所有行
        If n > 0 AndAlso drs(n)("总成绩") = drs(n-1)("总成绩") Then \'如果总分和上一行相同
            drs(n)("总排名") = drs(n-1)("总排名") \'则排名等于上一行
        Else
            drs(n)("总排名") = n + 1 \'设置排名
        End If
    Next
Next
Tables("成绩册").Sort = "总成绩 DESC"
Tables("成绩册").ResumeRedraw


————————————————————————————————————————————————————————————————
用这个代码,可以实现 我想要的功能,但有一个问题,如果我修改笔试排名后,要先删除是否面试列的内容,他不会自动刷新,可能是错的。

If e.DataCol.Name = "报考学科" Or e.DataCol.Name = "笔试排名" Then \'如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then \'如果新值是空白,也就是品名列的内容为空
        e.DataRow("是否面试") = Nothing \'那么清空此行单价列的内容
    Else
        Dim dr As DataRow
        \'否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        dr = DataTables("名额").Find("[报考学科] = \'" & e.NewValue & "\'")
        If dr IsNot Nothing Then \'如果找到了同名的产品行,也就是dr不是Nothing
            If e.DataRow("笔试排名") <= dr("面试名额") Then
                e.DataRow("是否面试") ="面试"
            End If
        End If
    End If
End If

[此贴子已经被作者于2020/6/16 22:38:57编辑过]

--  作者:有点蓝
--  发布时间:2020/6/16 22:37:00
--  
Dim drs As List(Of DataRow) = DataTables("成绩册").Select("[报考学科] = \'" & bj & "\'", "总成绩 DESC")

条件里的字符串要使用单引号引起来

--  作者:天宇科技
--  发布时间:2020/6/16 22:39:00
--  
我复制的代码呢?
--  作者:天宇科技
--  发布时间:2020/6/16 22:43:00
--  
行了。谢谢蓝版