Foxtable(狐表)用户栏目专家坐堂 → ListView做的文件件管理器怎么排序


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

主题:ListView做的文件件管理器怎么排序

帅哥哟,离线,有人找我吗?
lianghanyu
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:255 积分:2286 威望:0 精华:0 注册:2020/6/28 8:43:00
ListView做的文件件管理器怎么排序  发帖心情 Post By:2020/8/24 18:13:00 [只看该作者]

代码如下:

 

Dim path As String = "\" & Tables("项目总表").Current("项目编号") & "\" & tx

Dim lvw As WinForm.ListView = Forms("FTP管理器2").controls("ListView1")
lvw.Font = New Font("宋体",12)'设置字体型号与大小
lvw.StopRedraw() '停止绘制
lvw.Groups.Clear() '清除原来的分组
lvw.Columns.Clear() '清除原来的列
lvw.Rows.Clear() '清除原来的行
lvw.Images.Clear() '清除原来的图片
lvw.View = ViewMode.Details '显示模式为详细信息
lvw.Images.LargeSize = new size(32,32)
Dim  ics As String() = {"swf","accdb","mdb","psd","png","xls","xlsx","bmp","rar","jpg","doc","docx","zip","pdf","txt","ppt","pptx","exe","other","dwg","prt","SLDPRT","dxf","eml","stp","step","igs","x_t"}  '定义扩展名数组
Dim kzms As String ="swf accdb mdb psd png xls xlsx bmp rar jpg doc docx zip pdf txt ppt pptx exe dwg prt SLDPRT dxf eml stp step igs x_t"  '定义已知扩展名的文本串
For Each ic As String In ics
    lvw.Images.AddImage(ic,ic & ".png",ic & ".png")  '向listview里添加图标
Next

Dim cls() As String = {"文件","修改日期","大小"} '定义列名
Dim wds() As Integer = {350,180,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) '指定列宽
Next
Dim dls As List(of String)
dls = ftp.GetDetailList(path)
If dls.Count < = 0 Then
    Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
    r("文件") = "暂时没有文件"
Else
    For Each dl As String In dls
        Dim Parts() As String = dl.Split("*")
        Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
        Dim Dot As Integer = parts(0).LastIndexOf(".")  '定义.的位置
        Dim kzm As String = parts(0).SubString(Dot + 1)   '获取扩展名
        If kzms.Contains(kzm) = True Then   '若为已知扩展名
            r.ImageKey = kzm  '指定行的图标键值
        Else
            r.ImageKey = "other"
        End If
        r("文件") = Parts(0)
        r("修改日期") = Parts(1)
        If parts(2) >1024 Then
            r("大小") = format(parts(2)/1048576,"0.0") & "MB"
        Else
            r("大小") = Parts(2)& "B"
        End If
    Next
End If
lvw.ResumeRedraw() '恢复绘制

 

 

 

这样做出来后,可以实现显示功能,但是文件显示不是按修改日期顺序来显示的,如图:

 

 

有没有办法让他按修改日期来排序显示呢?


图片点击可在新窗口打开查看此主题相关图片如下:snipaste_2020-08-24_18-12-54.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/24 20:16:00 [只看该作者]

……
Dim dls As List(of String)
dls = ftp.GetDetailList(path)
If dls.Count < = 0 Then
    Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
    r("文件") = "暂时没有文件"
Else
Dim dics As new SortedDictionary(Of string, string)
For Each dl As String In dls
Dim Parts() As String = dl.Split("*")
    dics.Add(Parts(1)dl)
Next
    For Each dl As String In dics.values
        Dim Parts() As String = dl.Split("*")
        Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
        Dim Dot As Integer = parts(0).LastIndexOf(".")  '定义.的位置
……

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


加好友 发短信
等级:童狐 帖子:255 积分:2286 威望:0 精华:0 注册:2020/6/28 8:43:00
  发帖心情 Post By:2020/8/25 8:39:00 [只看该作者]

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:自定义函数,刷新ListView
详细错误信息:
调用的目标发生了异常。
已存在具有相同键的条目。

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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/25 8:45:00 [只看该作者]

dics.Add(Parts(1) & format(date.now,"ss.fffff"), dl)

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


加好友 发短信
等级:童狐 帖子:255 积分:2286 威望:0 精华:0 注册:2020/6/28 8:43:00
  发帖心情 Post By:2020/8/25 8:52:00 [只看该作者]

还是不行:

 

 

Dim dls As List(of String)
dls = ftp.GetDetailList(path)
If dls.Count < = 0 Then
    Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
    r("文件") = "暂时没有文件"
Else
    Dim dics As new SortedDictionary(Of String, String)
    For Each dl As String In dls
        Dim Parts() As String = dl.Split("*")
        dics.Add(Parts(1) & format(Date.now,"ss.fffff"), dl)
    Next
    For Each dl As String In dics.values
       
        Dim Parts() As String = dl.Split("*")
        Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
        Dim Dot As Integer = parts(0).LastIndexOf(".")  '定义.的位置
        Dim kzm As String = parts(0).SubString(Dot + 1)   '获取扩展名
        If kzms.Contains(kzm) = True Then   '若为已知扩展名
            r.ImageKey = kzm  '指定行的图标键值
        Else

 

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:自定义函数,刷新ListView
详细错误信息:
调用的目标发生了异常。
已存在具有相同键的条目。

 


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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/25 8:59:00 [只看该作者]

dics.Add(Parts(1) & dl, dl) 

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


加好友 发短信
等级:童狐 帖子:255 积分:2286 威望:0 精华:0 注册:2020/6/28 8:43:00
  发帖心情 Post By:2020/8/25 9:03:00 [只看该作者]

解决了。谢谢!

 

SortedDictionary(Of String, String) 是什么函数啊,怎么在帮助里搜不到关键词。

 

刚才为什么一直改 dics.Add  都不对啊?


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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/25 9:11:00 [只看该作者]

SortedDictionary这个百度吧,是.net的类型

不对是因为有重复的日期值

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


加好友 发短信
等级:童狐 帖子:255 积分:2286 威望:0 精华:0 注册:2020/6/28 8:43:00
  发帖心情 Post By:2020/8/25 10:38:00 [只看该作者]

百度了一下,太高深了,看不懂。还是狐表原生帮助里的通俗易懂。

 

按你上述的方法,可以实现按日期来排序了,但是 从小到大的。

 

我想反转过来,从大到小排序,要加什么函数。

 

我加了  dics.Reverse  好像没有作用


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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/25 11:32:00 [只看该作者]

    Dim dics As new SortedDictionary(Of String, String)
    For Each dl As String In dls
        Dim Parts() As String = dl.Split("*")
        dics.Add(Parts(1) & format(Date.now,"ss.fffff"), dl) 
    Next
Dim arr(dics.keys.count-1) As String
dics.keys.copyto(arr,0)
For i As Integer = arr.length - 1 To 0 Step -1
    dl As String = dics(arr(i))
    Dim Parts() As String = dl.Split("*")
……

 回到顶部
总数 12 1 2 下一页