以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于listview筛选后排序问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100008)

--  作者:沦落深蓝
--  发布时间:2017/5/2 19:05:00
--  关于listview筛选后排序问题
关于某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



--  作者:有点蓝
--  发布时间: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 = "最终得分"

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

--  作者:有点色
--  发布时间: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 = "最终得分"


--  作者:沦落深蓝
--  发布时间:2017/5/3 22:04:00
--  
感谢老师~~~~~这个真棒图片点击可在新窗口打开查看