Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
下面是一个典型的应用,在一个成绩表中,包括班级、姓名、总分、总分排名几列数据,希望按班级自动生成总分排名:
'获得所有班级名称,保存在集合中
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
上面的代码懂了,但是新的问题是:
某单位希望做个排号等候系统,按上述代码思路可以给人员进行顺序号分配,但是后面新到的人员在顺序分配号码不能打乱前面的号码,因此在分配时应该排除已分配的顺序号码,请问如何做到?
上面的代码也应该有逻辑问题:
drs(n)("总分排名") = n + 1
'设置排名
应该更正为:
drs(n)("总分排名") =drs(n-1)("总分排名") + 1 '设置排名
否者,当连续出现几个同名次的人员以后,会出现名次断档,如
第1名
第2名
第2名
第4名
第5名
第5名
第5名
第8名
……
一楼的问题只是编号而已,不是排名,应该更简单的。
每次新来一个,就从1开始查找,如果某个数字在现有的编号没有出现,就将此数字作为新来人员的编号。
如果这样,就更简单了,一个DataTables("AAA").Compute(Max("XXX"))就可以搞定。