Select方法的灵活使用

普通用户可以忽略本节内容。

DataTable的Select是一个非常重要的方法,灵活使用,可以轻松解决很多看似复杂的难题。

示例一

下面的示例可以参考CaseStudy目录下的文件: 成绩排名.Table

例如在一个成绩表中,包括班级、姓名、总分、总分排名几列数据,希望按班级自动生成总分排名:

'获得所有班级名称,保存在集合中
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

示例二

下面的示例可以参考CaseStudy目录下的文件: 等级划分.Table

假定有一个表,有分数和等级两列,
要根据分数从高到低进行等级划分,其中A等占10%,B等占25%,C等占40%,D等占20%,E等占5%。

代码为:

Dim vals() As Double = {0.1,0.35,0.75,0.95}
Dim
cnt As Integer = DataTables("表A").DataRows.Count '得到总行数
Dim
drs As List (of DataRow) = DataTables("表A").Select("", "分数 Desc") '得到按分数高低排列的行的集合.
For
i As Integer = 0 To drs.Count - 1
    Dim v As Double  = i /cnt 
'
计算 位置比例
    If v > vals(3) Then
        drs(i)(
"
等级") = "E"
    ElseIf v > vals(2) Then
        drs(i)(
"
等级") = "D"
    ElseIf v > vals(1) Then
        drs(i)(
"
等级") = "C"
    ElseIf v > vals(0) Then
        drs(i)(
"
等级") = "B"
   
Else
        drs(i)("等级") = "A"
    End
If

Next


本页地址:http://www.foxtable.com/webhelp/topics/2382.htm