Foxtable(狐表)用户栏目专家坐堂 → 关于listview筛选后排序问题


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

主题:关于listview筛选后排序问题

帅哥哟,离线,有人找我吗?
沦落深蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:170 积分:1195 威望:0 精华:0 注册:2016/2/21 18:26:00
关于listview筛选后排序问题  发帖心情 Post By:2017/5/2 19:05:00 [只看该作者]

关于某listview的排序问题~~~很早之前请教过老师了~~~通过代码把数据按照考核项目分组后,通过  标出的代码  
把所有人员各项目最近一次考核时间的相关数据显示出来~~~现在存在一个排序的问题~~~就是的确是显示的人员
最近的一次考核成绩,但是按照表格输入的顺序,应该是
考核项目A
张三
李四
王五

但是实际输出是
考核项目A
王五
李四
张三

而且我尝试把表格的输入顺序给倒一下,结果依然没有变~~~这是为什么呢~~~
有没有办法然显示的顺序给纠正过来呢~~~

上传了实例~~~设置了两个排序不同的表便于老师调试


    With DataTables("考核成绩表")
        .LoadTop = "100 Percent"
        .Load()
    End With
    Dim lvw As WinForm.ListView = e.Form.Controls("LV训练成绩")
    lvw.StopRedraw() '停止绘制
    lvw.Groups.Clear() '清除原来的分组
    lvw.Columns.Clear() '清除原来的列
    lvw.Rows.Clear() '清除原来的行
    lvw.Images.Clear() '清除原来的图片
    lvw.View = ViewMode.Details '显示模式为详细信息
    Dim cls() As String = {"","姓名","XX","XXX","考核情况_完成时间","考核情况_最终得分","等级评定","考核时间"} '定义列名
    Dim wds() As Integer = {0,100,100,100,120,120,100,150} '定义列宽
    For i As Integer = 0 To  cls.Length - 1  '增加列
        Dim c As WinForm.ListViewColumn = lvw.Columns.Add()
        c.Name = cls(i) '指定列名
        c.Text = cls(i) '指定标题,这里标题和列名相同
        c.Width = wds(i) '指定列宽
        c.TextAlign = HorizontalAlignment.center
    Next
    For Each zh As String In DataTables("考核成绩表").GetValues("考核项目") '增加分组
        Dim grp As WinForm.ListViewGroup = lvw.Groups.Add()
        grp.Name = zh
        grp.Text = zh

        For Each xm As String In DataTables("考核成绩表").GetValues("姓名", "考核项目 = '" & zh & "'")
            Dim dr As DataRow = DataTables("考核成绩表").find("考核项目 = '" & zh & "' and 姓名 = '" & xm & "'", "考核时间 desc")
            Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
            r.Group = dr("考核项目") '指定所属分组
            r.Font = New Font("微软雅黑",12)
            For Each cl As String In cls '逐列取值
                If cl > ""
                    r(cl) = dr(cl)
                End If
            Next
        Next
    Next
    
    lvw.ResumeRedraw() '恢复绘制
    lvw.Columns("考核情况_完成时间").Text = "考核用时" '修改考"核情况_完成时间"列的标题
    lvw.Columns("考核情况_最终得分").Text = "最终得分"

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table



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


加好友 发短信
等级:超级版主 帖子:107381 积分:546178 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/2 20:26:00 [只看该作者]

With DataTables("考核成绩表")
    .LoadTop = "100 Percent"
    .Load()
End With
Dim lvw As WinForm.ListView = e.Form.Controls("LV训练成绩")
lvw.StopRedraw() '停止绘制
lvw.Groups.Clear() '清除原来的分组
lvw.Columns.Clear() '清除原来的列
lvw.Rows.Clear() '清除原来的行
lvw.Images.Clear() '清除原来的图片
lvw.View = ViewMode.Details '显示模式为详细信息
Dim cls() As String = {"","姓名","XX","XXX","考核情况_完成时间","考核情况_最终得分","等级评定","考核时间"} '定义列名
Dim wds() As Integer = {0,100,100,100,120,120,100,150} '定义列宽
For i As Integer = 0 To  cls.Length - 1  '增加列
    Dim c As WinForm.ListViewColumn = lvw.Columns.Add()
    c.Name = cls(i) '指定列名
    c.Text = cls(i) '指定标题,这里标题和列名相同
    c.Width = wds(i) '指定列宽
    c.TextAlign = HorizontalAlignment.center
Next
For Each zh As String In DataTables("考核成绩表").GetValues("考核项目") '增加分组
    Dim grp As WinForm.ListViewGroup = lvw.Groups.Add()
    grp.Name = zh
    grp.Text = zh
    
    For Each dr As DataRow In DataTables("考核成绩表").Select("考核项目 = '" & zh & "'","_Identify desc")
        Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
        r.Group = dr("考核项目") '指定所属分组
        r.Font = New Font("微软雅黑",12)
        For Each cl As String In cls '逐列取值
            If cl > ""
                r(cl) = dr(cl)
            End If
        Next
    Next
Next

lvw.ResumeRedraw() '恢复绘制
lvw.Columns("考核情况_完成时间").Text = "考核用时" '修改考"核情况_完成时间"列的标题
lvw.Columns("考核情况_最终得分").Text = "最终得分"

 回到顶部
帅哥哟,离线,有人找我吗?
沦落深蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:170 积分:1195 威望:0 精华:0 注册:2016/2/21 18:26:00
  发帖心情 Post By:2017/5/3 20:33:00 [只看该作者]

老师~~~这样顺序是对了~~~但是原来的只显示”最近一次考核时间的相关数据”的功能没有了~~~只是按照顺序排序,比如张三在4月1日考核了一次,5月1日又考核了一次
原来只会显示5月1日的成绩,虽然顺序是倒着的,现在顺序正了,但是变成了不区别全显示了~~~由于一年测试次数较多,listview空间有限,只想显示最新一次的成绩
~~~还请老师看看有没有办法解决图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/3 21:04:00 [只看该作者]

With DataTables("考核成绩表")
        .LoadTop = "100 Percent"
        .Load()
    End With
    Dim lvw As WinForm.ListView = e.Form.Controls("LV训练成绩")
    lvw.StopRedraw() '停止绘制
    lvw.Groups.Clear() '清除原来的分组
    lvw.Columns.Clear() '清除原来的列
    lvw.Rows.Clear() '清除原来的行
    lvw.Images.Clear() '清除原来的图片
    lvw.View = ViewMode.Details '显示模式为详细信息
    Dim cls() As String = {"","姓名","XX","XXX","考核情况_完成时间","考核情况_最终得分","等级评定","考核时间"} '定义列名
    Dim wds() As Integer = {0,100,100,100,120,120,100,150} '定义列宽
    For i As Integer = 0 To  cls.Length - 1  '增加列
        Dim c As WinForm.ListViewColumn = lvw.Columns.Add()
        c.Name = cls(i) '指定列名
        c.Text = cls(i) '指定标题,这里标题和列名相同
        c.Width = wds(i) '指定列宽
        c.TextAlign = HorizontalAlignment.center
    Next
    For Each zh As String In DataTables("考核成绩表").GetValues("考核项目") '增加分组
        Dim grp As WinForm.ListViewGroup = lvw.Groups.Add()
        grp.Name = zh
        grp.Text = zh


        For Each xm As String In DataTables("考核成绩表").GetValues("姓名", "考核项目 = '" & zh & "'", "_Identify desc")
            Dim dr As DataRow = DataTables("考核成绩表").find("考核项目 = '" & zh & "' and 姓名 = '" & xm & "'", "考核时间 desc")
            Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
            r.Group = dr("考核项目") '指定所属分组
            r.Font = New Font("微软雅黑",12)
            For Each cl As String In cls '逐列取值
                If cl > ""
                    r(cl) = dr(cl)
                End If
            Next
        Next
    Next
   
    lvw.ResumeRedraw() '恢复绘制
    lvw.Columns("考核情况_完成时间").Text = "考核用时" '修改考"核情况_完成时间"列的标题
    lvw.Columns("考核情况_最终得分").Text = "最终得分"


 回到顶部
帅哥哟,离线,有人找我吗?
沦落深蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:170 积分:1195 威望:0 精华:0 注册:2016/2/21 18:26:00
  发帖心情 Post By:2017/5/3 22:04:00 [只看该作者]

感谢老师~~~~~这个真棒图片点击可在新窗口打开查看

 回到顶部