'获得所有班级名称,保存在集合中
Dim bjs As List(Of
String) = DataTables("成绩表").GetUniqueValues("","班级")
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
代码如上,我想这代码有问题,比如例子里面,如果有两个 400 分的人的话,那 因为 for 循环会自动加 1的关系
导致 这两人的排名一样,如 两个都是 排名 20 ,那当第一个是 20的时候 for 已经自动加 1 n 的值是21了,
当给第二个 排名的时候 FOR 的值已经是 22 了,也就是 会 缺少排名 21!!
我修改了下代码,如下:
Dim bjs As List(Of String) = DataTables("成绩表").GetUniqueValues("","班级")
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 '遍历所有行
output.show(n)
If n=0 Then
drs(n)("总分排名") = 1
ElseIf n>0 AndAlso drs(n)("总分") = drs(n-1)("总分") Then '如果总分和上一行相同
drs(n)("总分排名") = drs(n-1)("总分排名") '则排名等于上一行
Else
drs(n)("总分排名") = drs(n-1)("总分排名") + 1 '设置排名
End If
Next
Next