Foxtable(狐表)用户栏目专家坐堂 → [求助]如何进行多层次排名?


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

主题:[求助]如何进行多层次排名?

帅哥哟,离线,有人找我吗?
狐狸爸爸
  31楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/12 9:35:00 [只看该作者]

我测试也没有问题,记得我的代码是直接排序主表的,在主表查看结果:

 


图片点击可在新窗口打开查看此主题相关图片如下:001.jpg
图片点击可在新窗口打开查看

 

为便于比较,你删除排名列原来的数据看看。

[此贴子已经被作者于2013-11-12 9:37:14编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1140 积分:8818 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2013/11/12 10:23:00 [只看该作者]

是这段代码吗:
For Each zw As String  In Tables("面试成绩_笔试").DataTable.GetValues("职位代码")
    Dim sort As Integer =1
    Dim drs As List(of DataRow) = Tables("面试成绩_笔试").DataTable.Select("职位代码 = '" & zw & "'","总成绩 DESC, 笔试总成绩 DESC,行测成绩 Desc")
    If drs.count > 0 Then
        drs(0)("排名") = 1
        For i As Integer = 1 To drs.count -1
            If drs(i)("总成绩") < drs(i-1)("总成绩") OrElse drs(i)("笔试总成绩") < drs(i-1)("笔试总成绩") OrElse drs(i)("行测成绩") < drs(i-1)("行测成绩") Then
                drs(i)("排名") = i +1
            Else
                drs(i)("排名") = drs(i-1)("排名")
            End If
        Next
    End If
Next
e.Form.Controls("笔试").Table.Sort="职位代码,面试排名"


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/12 10:26:00 [只看该作者]

28楼

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/12 10:27:00 [只看该作者]

经过测试,我的代码,以及狐爸的代码都正常运作的啊,就是你发上来的例子.

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/12 10:38:00 [只看该作者]

你有两个排名列,我们计算的是排名,不是面试排名,你不要看错了。

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


加好友 发短信
等级:五尾狐 帖子:1140 积分:8818 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2013/11/12 10:38:00 [只看该作者]

谢谢狐爸和BIN,我找到问题所在了,原来在代码中,“排名”应改为“面试排名”,已正确,谢谢几天来你们的讲解,我会好好努力,下一步我要买一个开发版的,再次谢谢你们的不辞辛劳。

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


加好友 发短信
等级:五尾狐 帖子:1140 积分:8818 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2013/11/12 14:32:00 [只看该作者]

又遇到新问题啦,我想做这样一个标注:当同一个职位代码,总成绩相同时,我想在总成绩上显示红色,提醒该成绩是相同的,怎么写代码,我写了一个,但不行,帮我看看: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 e.Col.Name = "总成绩" Then
            'If e.Row("总成绩") = e.Row("总成绩") Then
                'e.Style = "a"
            'End If
        'End If
    'Next
'Next

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/12 14:43:00 [只看该作者]

首先DrawCell执行频繁,不应该执行大量的代码,所以你应该在排序的时候就循环所有行把成绩相同的行标识出来

具体做法是,增加一个列,然后把这个列隐藏,如果是成绩相同的就把这个列的值设置为相同

然后再DrawCell事件中执行代码

if e.row("标识")="相同" then
   if e.col.name="总成绩" then
     e.Style = "a"
   end if
end if

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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/12 14:51:00 [只看该作者]

标识列可以用逻辑型,排名的代码改为:
 
For Each zw As String  In DataTables("笔试成绩").GetValues("职位代码")
    Dim drs As List(of DataRow) = DataTables("笔试成绩").Select("职位代码 = '" & zw & "'","总成绩 DESC, 笔试总成绩 DESC,行测成绩 Desc")
    If drs.count > 0 Then
        drs(0)("排名") = 1
        drs(0)("标识") = False
        For i As Integer = 1 To drs.count -1
            If drs(i)("总成绩") < drs(i-1)("总成绩") OrElse drs(i)("笔试总成绩") < drs(i-1)("笔试总成绩") OrElse drs(i)("行测成绩") < drs(i-1)("行测成绩") Then
                drs(i)("排名") = i +1
            Else
                drs(i)("排名") = drs(i-1)("排名")
            End If
            If drs(i)("总成绩") = drs(i-1)("总成绩")  Then
                drs(i)("标识") = True
                drs(i-1)("标识") = True
            Else
                drs(i)("标识") = False
            End If
        Next
    End If
Next
 
这样标识列等于True,标识存在相同的总分,DrawCell事件设置为:
 
if e.row("标识")= Tru" then
        if e.col.name="总成绩" then
               e.Style = "样式名"
        end if
end if

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


加好友 发短信
等级:五尾狐 帖子:1140 积分:8818 威望:0 精华:0 注册:2012/7/10 9:09:00
  发帖心情 Post By:2013/11/12 14:55:00 [只看该作者]

非常非常感谢

 回到顶部
总数 41 上一页 1 2 3 4 5 下一页