以文本方式查看主题

-  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=50006)

--  作者:baixiaobai
--  发布时间:2014/4/27 20:39:00
--  ListView有办法排序么
请问各位亲,ListView怎么使用排序呢?
--  作者:有点甜
--  发布时间:2014/4/27 20:41:00
--  
 排序?listview的内容是你添加进去的。你控制添加的先后顺序便可控制排序了。
--  作者:riverzhang163
--  发布时间:2022/10/26 11:51:00
--  [求助] listview排序
请问排序的语句在下面的例子里面要如何添加呢? 谢谢老师。

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


--  作者:有点蓝
--  发布时间: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
--  发布时间:2022/11/5 14:46:00
--  
请教老师,按这个方法排序,数据在加载的时候非常慢而且届面会闪,有没有其他方法? 谢谢!
--  作者:有点蓝
--  发布时间:2022/11/5 15:51:00
--  
lvw.StopRedraw() \'暂停绘制
……
lvw.ResumeRedraw() \'恢复绘制

--  作者:riverzhang163
--  发布时间:2022/11/5 16:44:00
--  
这是什么意思?原来的语句里都是有写这两条的呀。
--  作者:有点蓝
--  发布时间:2022/11/5 17:01:00
--  
帮助搜索“StopRedraw”,看说明。如果没有效果,可以考虑也调用一下窗口的StopRedraw