以文本方式查看主题

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

--  作者:mickey2008
--  发布时间:2020/1/13 18:10:00
--  Listview 重新加载跟前一步列排序发生冲突
从论坛上得到全局代码实现ListView的列排序,效果很完美。问题是列排序操作之后,按需要重载ListView的时候,意外发生报错,不知道怎么解决。
有可能是控件上已被设置的排序条件跟重载数据的排序之间发生冲突,而老师提供的全局代码,自己也不敢弄。
希望能得到完美的结果。。

图片点击可在新窗口打开查看此主题相关图片如下:lv-sort error.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2020/1/13 20:17:00
--  
贴出具体代码,或者上传实例说明
--  作者:mickey2008
--  发布时间:2020/1/15 18:35:00
--  Listview 重新加载跟前一步列排序发生冲突- 示例
谢谢老师的及时回复。
添加了报错示例,首先生成,后续列排序,然后重载的时候,就报错。。。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:listview列排序.rar



--  作者:有点蓝
--  发布时间:2020/1/16 10:32:00
--  
生成按钮和重载都改为

Dim lsv As System.Windows.Forms.ListView = e.Form.Controls("ListView1").BaseControl
RemoveHandler lsv.ColumnClick, AddressOf Listview1_ColumnClick
lsv.ListViewItemSorter =  Nothing

Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw.StopRedraw() \'暂停绘制
lvw.Columns.Clear() \'清除原来的列
lvw.Rows.Clear() \'清除原来的行
lvw.Images.Clear() \'清除原来的图片
lvw.View = ViewMode.Details \'显示模式为详细信息
lvw.GridLines = True \'显示网格线
Dim cls() As String = {"国家","人口","面积","语言","宗教","洲"} \'指定要显示的各列 
For Each c As String In cls
    Dim cl As object = lvw.Columns.Add
    cl.Name = c
    cl.Text = c
Next
lvw.Columns("人口").Text = "人口(万)" \'修改人口列的标题 
lvw.Columns("人口").TextAlign = HorizontalAlignment.Right \'人口列靠右对齐
lvw.Columns("面积").TextAlign = HorizontalAlignment.Right \'面积列靠右对齐
For Each dr As DataRow In DataTables("国家").DataRows \'从数据表中提取数据
    Dim Key As String = dr("图标")
    Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() \'增加一行
    lvw.Images.AddImage(Key, Key & ".ico", Key & "48.ico") \'添加代表这个国家的一对图标
    r.ImageKey = Key \'指定图标键值
    For Each cl As String In cls \'逐列取值
        Select Case cl
            Case "人口","面积" \'如果是人口列或面积列
                \'r(cl) = format(dr(cl),"#,000") \'则显示千位分割符号
                r(cl) = dr(cl)
            Case Else
                r(cl) = dr(cl)
        End Select
    Next
Next
lvw.ResumeRedraw() \'恢复绘制

AddHandler lsv.ColumnClick, AddressOf Listview1_ColumnClick
lsv.ListViewItemSorter =  new ListViewColumnSorter

--  作者:mickey2008
--  发布时间:2020/1/16 15:34:00
--  操作有误,排序全盘失效。。。。
老师,将您的代码考过来执行后,刚开始很完美的。
接下来整理代码的时候,不小心动了一下相关代码,结果执行报错。找到原因之后将代码重新调过来,仍然报错。
不知道怎么能回到初始的状态,难道那条误操作逻辑,死死地注册在某地方?

--  作者:有点蓝
--  发布时间:2020/1/16 15:40:00
--  
关闭退出项目,删除项目所在的文件夹里的bin目录,然后重启项目试试。

如果还不行,上传实例

--  作者:mickey2008
--  发布时间:2020/1/17 13:27:00
--  圆满解决问题。。
谢谢老师的耐心指导。
对全局代码和局部代码的反复调整,已经莫名的修复过来了,效果很完美 !!! 
正是我想要的理想结果 !
狐表是一个很不错的软件,不仅东西好,老师的指导也这么到位,我为狐表给1万个赞 !