以文本方式查看主题 - 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 = "最终得分" |
-- 作者:有点蓝 -- 发布时间: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("考核成绩表")
|
-- 作者:沦落深蓝 -- 发布时间:2017/5/3 22:04:00 -- 感谢老师~~~~~这个真棒 |