Foxtable(狐表)用户栏目专家坐堂 → ListView有办法排序么


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

主题:ListView有办法排序么

美女呀,离线,留言给我吧!
baixiaobai
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:317 积分:2555 威望:0 精华:0 注册:2013/3/8 0:32:00
ListView有办法排序么  发帖心情 Post By:2014/4/27 20:39:00 [只看该作者]

请问各位亲,ListView怎么使用排序呢?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/27 20:41:00 [只看该作者]

 排序?listview的内容是你添加进去的。你控制添加的先后顺序便可控制排序了。

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


加好友 发短信
等级:幼狐 帖子:141 积分:1267 威望:0 精华:0 注册:2015/11/5 13:33:00
[求助] listview排序  发帖心情 Post By:2022/10/26 11:51:00 [只看该作者]

请问排序的语句在下面的例子里面要如何添加呢? 谢谢老师。

1、在窗口插入一个ListView控件

2、窗口的AfterLoad事件代码设置为:

Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw
.StopRedraw() '暂停绘制
lvw
.View = ViewMode.Details  '显示模式为详细内容
lvw
.GridLines = True '显示网格线
Dim 
cls() As String = {"国家","人口","面积","语言","宗教",""} '指定要显示的各列 
Dim
 wds() As Integer = {120,100,130,80,80,80} '定义列宽 
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'指定列宽 
Next
lvw.Columns("人口").Text = "人口()" '修改人口列的标题
lvw
.Columns("人口").TextAlign = HorizontalAlignment.Right '人口列靠右对齐
lvw
.Columns("面积").TextAlign = HorizontalAlignment.Right '面积列靠右对齐
lvw
.VirtualMode = True  '以虚拟模式显示
lvw
.VirtualListSize = DataTables("国家").DataRows.count '设置虚拟模式下要显示的行数
lvw
.ResumeRedraw() '恢复绘制

上面的代码生成了ListView的列,但是没有添加行,只是通过以下两行代码使用虚拟模式,以及虚拟模式下的行数:

lvw.VirtualMode = True  '以虚拟模式显示
lvw
.VirtualListSize = DataTables("国家").DataRows.count '设置虚拟模式下要显示的行数

3、将ListView的RetrieveVirtualRow事件代码设置为:

Dim lvw As WinForm.ListView = e.Sender
Dim
 dr As DataRow = DataTables("国家").DataRows(e.Index) '根据行位置从数据表中取得对应的DataRow
Dim
 Key As String = dr("图标")
lvw
.Images.AddImage(Key, Key & ".ico", Key & "48.ico"'添加代表这个国家的图标
e
.Row.Imagekey = key '指定图标键值
For
 Each cl As WinForm.ListViewColumn In lvw.Columns '逐列取值
    Select Case cl.Name
        Case 
"
人口","面积" '如果是人口列或面积列
            e.Row(cl.Name) = Format(dr(cl.Name),"#,000"
'
则显示千位分割符号
        Case Else
            e.Row(cl.Name) = dr(cl.Name)
    
End Select
Next


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/10/26 11:56:00 [只看该作者]

Dim dr As DataRow = DataTables("国家").DataRows(e.Index)

改为
Tables("国家").sort = "某排序列"
Dim dr As Row = Tables("国家").Rows(e.Index)

------------
lvw.VirtualListSize = DataTables("国家").DataRows.count
改为
lvw.VirtualListSize = Tables("国家").Rows.count
[此贴子已经被作者于2022/10/26 11:56:21编辑过]

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


加好友 发短信
等级:幼狐 帖子:141 积分:1267 威望:0 精华:0 注册:2015/11/5 13:33:00
  发帖心情 Post By:2022/11/5 14:46:00 [只看该作者]

请教老师,按这个方法排序,数据在加载的时候非常慢而且届面会闪,有没有其他方法? 谢谢!

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/5 15:51:00 [只看该作者]

lvw.StopRedraw() '暂停绘制
……
lvw.ResumeRedraw() '恢复绘制

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


加好友 发短信
等级:幼狐 帖子:141 积分:1267 威望:0 精华:0 注册:2015/11/5 13:33:00
  发帖心情 Post By:2022/11/5 16:44:00 [只看该作者]

这是什么意思?原来的语句里都是有写这两条的呀。

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110587 积分:562831 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/5 17:01:00 [只看该作者]

帮助搜索“StopRedraw”,看说明。如果没有效果,可以考虑也调用一下窗口的StopRedraw

 回到顶部