求助大神解决一下问题;我想自制一个ftp文件管理器使用listview按照文件修改日期排序显示出来,上传文件和删除文件后能刷新,昨天求助了客服,他帮我写了全局代码(非常感谢!),排序显示已经实现了,但是刷新listview,就会出错,,,求助大神帮我!!!嘿嘿
以下是全局代码(昨晚找度娘查看了半天,说是泛类接口比较排序方法,感觉还是迷茫!!!)
Public Class ListViewItemComparer
Implements System.Collections.IComparer
Public sort_b As Boolean
Public order As System.Windows.Forms.SortOrder = System.Windows.Forms.SortOrder.Ascending
Private Col As Integer
Public Sub New()
Col = 0
End Sub
Public Sub New(Column As Integer, sort As Boolean)
Col = Column
sort_b = sort
End Sub
Public Function Compare(x As Object, y As Object) As Integer Implements System.Collections.IComparer.Compare
If sort_b Then
Return String.Compare((CType(x, System.Windows.Forms.ListViewItem)).SubItems(Col).Text, (CType(y, System.Windows.Forms.ListViewItem)).SubItems(Col).Text)
Else
Return String.Compare((CType(y, System.Windows.Forms.ListViewItem)).SubItems(Col).Text, (CType(x, System.Windows.Forms.ListViewItem)).SubItems(Col).Text)
End If
End Function
End Class
---------------------------------------------------------------------------------------------------------------------------------
以下代码放在需要排序的地方:我放在了自制内部函数“新listview”里面
Dim lsv = e.Form.Controls("ListView1").basecontrol
lsv.ListViewItemSorter = new ListViewItemComparer(2, True) '这里的2改成您日期列在所有列中的顺序,需要倒序True改成False
---------------------------------------------------------------------------------------------------------------------------------
以下是我的 自制内部函数“新listview”:
Dim ftp As new FTPClient '定义好ftp账号
'ftp.Host="192.168.11.51"
ftp.Host="10.46.95.219"
ftp.Account="foxftp"
ftp.Password="123"
ftp.ChangeDir("\zzsj") '进入到zzsj目录,\绝对目录,没斜杠相对目录
Dim fp As String = "\zzsj\" & Tables("日常事务").Current("自制") '定义变量来代替动态路径
If ftp.DirExists(fp) = False Then '若目录不存在就自增
ftp.MakeDir(fp)
End If
'==============以上是设置ftp路径======================
Dim lvw As WinForm.ListView = Forms("日常事务").Controls("ListView1")
lvw.Columns.Clear() '清除原来的列
lvw.Rows.Clear() '清除原来的行
lvw.Images.Clear() '清除原来的图片
lvw.View = ViewMode.Details '显示模式为详细信息
'lvw.GridLines = True '显示网格
Dim cls() As String = {"文件","修改日期","大小"} '定义列名
Dim wds() As Integer = {900,200,200} '定义列宽
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("文件").TextAlign = HorizontalAlignment.left '文件列靠左
lvw.Columns("修改日期").TextAlign = HorizontalAlignment.Right '日期列靠右对齐
lvw.Columns("大小").TextAlign = HorizontalAlignment.Right '大小列靠右对齐
'调用全局代码
Dim lsv = Forms("日常事务").Controls("ListView1").basecontrol
lsv.ListViewItemSorter = new ListViewItemComparer(1,False)
'--------------------------------------------------按照图标显示文件-------------------------------------------------------------
Dim ics() As String={"swf","accdb","mdb","psd","png","xls","xlsx","bmp","rar","jpg","doc","docx","zip","pdf","txt","ppt","exe","7z","dwg","ico","other"}
Dim kzms As String="swf accdb mdb psd png xls xlsx bmp rar jpg doc docx zip pdf txt ppt exe 7z dwg ico"
For Each ic As String In ics
lvw.images.addimage(ic,ic & ".png",ic & ".png")
Next
'Dim sts As List(of String)=ftp.getfilelist(fp)
Dim sts As List(of String)=ftp.GetDetailList(fp)
If sts.count>0 Then
For Each st As String In sts
Dim Values() As String
Values = st.split("*")
Dim r As WinForm.ListViewRow=lvw.Rows.Add
Dim Dot As Integer=Values(0).lastindexof(".")
Dim kzm As String=Values(0).Substring(Dot+1)
Dim dogx As Integer=CDbl(Values(2))/1024
Dim cat As String=CStr(dogx) & "K"
r("文件")=Values(0)
r("修改日期")=Values(1)
r("大小")=cat
If kzms.contains(kzm)=True Then
r.ImageKey = kzm
Else
r.ImageKey ="other"
End If
Next
End If
窗口界面上的刷新按钮:click事件:Functions.Execute("新ListView")
点击按钮出错,如图:
点击存在调用“新listview”的按钮都出错
上传按钮click事件代码:
Dim dlg As new OpenFileDialog
If dlg.ShowDialog = DialogResult.OK Then
Dim xg As Integer = dlg.FileName.LastIndexOf("\")
Dim fname As String = dlg.FileName.SubString(xg+1) '获取所选文件名
Dim ftp As new FTPClient '定义好ftp账号
'ftp.Host="192.168.11.51"
ftp.Host="10.46.95.219"
ftp.Account="foxftp"
ftp.Password="123"
Dim fp As String ="\zzsj\" & Tables("日常事务").Current("自制")
Dim sts As List(of String)=ftp.GetDetailList(fp)
If sts.Count > 0 Then
For Each st As String In sts
If st = fname Then
If MessageBox.Show("服务器上存在同名文件,是否覆盖!","提醒",MessageBoxButtons.YesNo,MessageBoxIcon.Question)=DialogResult.Yes Then
If ftp.DeleteFile(fp & "\" & fname)=True Then
ftp.Upload(dlg.FileName,fp & "\" & fname)
Functions.Execute("新listview") '上传后刷新
End If
'Return '简化操作,可以添加是否覆盖功能
End If
End If
Next
e.Form.text="文件上传中......"
If ftp.Upload(dlg.FileName,fp & "\" & fname)=True Then
e.Form.text="日常事务"
MessageBox.Show("上传成功!","提醒")
Functions.Execute("新listview") '上传后刷新
Else
MessageBox.Show("上传失败!","提醒")
e.Form.text="日常事务"
End If
End If
End If
求大神解决下,555555555.。。。
非常感谢狐表的专家老师们热心解答帮我解决了两天来纠结的问题,以后有问题了还要经常来请教哈,嘿嘿。。。
把结果公布出来,方便更多朋友查阅,希望能帮助到更多的正在学习狐表的朋友们。
最后还是感谢小黄老师,感谢专家。
更改“新listview”内部函数为
'==============以上是设置ftp路径======================
Dim lvw As WinForm.ListView = Forms("日常事务").Controls("ListView1")
'添加清空原排序值
Dim lsvt = lvw.BaseControl
lsvt.ListViewItemSorter = Nothing
'将排序代码放在最后,
Dim lsv = Forms("日常事务").Controls("ListView1").basecontrol
lsv.ListViewItemSorter = new ListViewItemComparer(1,False)
[此贴子已经被作者于2016/3/18 11:43:12编辑过]