ListView控件数据操作
一、添加表头和数据
在窗口显示数据时,经常会用到ListView这个控件,虽然也可以使用ListBox,但其功能还是比较弱一些,ListView相对用起来更顺手一些。下面的两个函数是给控件添加表头和数据的函数,贴出来供大家参考。
函数代码
给ListView添加数据,数据可以为数组或单行数据(逗号分隔)
Public Sub AddListViewData(ListViewName As Object, DateArr, Optional Header As Integer = 0, Optional AddData As Boolean = False)'添加ListView数据,正常为数组,支持单行数据添加(逗号分隔)'第一行数据为标题行时,Header应为1'默认为替换数据,如果需要在原有数据基础上添加时,AddData应为TrueDim i As Integer, j As IntegerDim DateCol() As StringDim Itm As ObjectDim PartKey As StringIf Not AddData Then ListViewName.ListItems.ClearIf IsArray(DateArr) ThenFor i = LBound(DateArr) + Header To UBound(DateArr)Set Itm = ListViewName.ListItems.Add()Itm.Text = DateArr(i, LBound(DateArr, 2))For j = LBound(DateArr, 2) + LBound(DateArr) To UBound(DateArr, 2)Itm.SubItems(j - LBound(DateArr)) = DateArr(i, j)NextNextElseIf IsEmpty(DateArr) Or DateArr = "没有记录" Then Exit SubDateCol = Split(DateArr, ",")Set Itm = ListViewName.ListItems.Add()Itm.Text = DateCol(LBound(DateCol))For i = LBound(DateCol) + LBound(DateArr) To UBound(DateCol)Itm.SubItems(i - LBound(DateArr)) = DateCol(i)NextEnd IfEnd Sub
给ListView添加表头,支持直接给定宽度和额外增加的宽度
Public Sub AddListViewHead(ListViewName As Object, ColHeader, Optional ColWidth As String, Optional AddWidth As Integer = 5, Optional DefultWidth As String = "Auto")Dim SpHeader() As StringDim SpWidth() As StringDim SpAlign() As StringDim CW As IntegerDim CA As IntegerDim i As IntegerListViewName.ColumnHeaders.ClearListViewName.ListItems.ClearSpWidth = Split(ColWidth, ",")If UBound(SpWidth) = 0 Then CW = Val(ColWidth)With ListViewNameIf IsArray(ColHeader) ThenFor i = LBound(ColHeader, 2) To UBound(ColHeader, 2)If i <= UBound(SpWidth) Then CW = Val(SpWidth(i)) Else CW = IIf(DefultWidth = "Auto", 0, CW)If CW >= 0 And CW < Len(StrConv(ColHeader(0, i), vbFromUnicode)) * 15 + AddWidth Then CW = Len(StrConv(ColHeader(0, i), vbFromUnicode)) * 15 + AddWidthIf CW < 0 Then CW = 0.ColumnHeaders.Add , , ColHeader(0, i), CWNextElseIf ColHeader = "操作不成功" Then Exit SubSpHeader = Split(ColHeader, ",")For i = LBound(SpHeader) To UBound(SpHeader)If i <= UBound(SpWidth) Then CW = Val(SpWidth(i)) Else CW = IIf(DefultWidth = "Auto", 0, CW)If CW >= 0 And CW < LenB(StrConv(SpHeader(i), vbFromUnicode)) * 7.5 + AddWidth Then CW = LenB(StrConv(SpHeader(i), vbFromUnicode)) * 7.5 + AddWidthIf CW < 0 Then CW = 0.ColumnHeaders.Add , , SpHeader(i), CWNextEnd If.View = lvwReport.FullRowSelect = True.Gridlines = TrueEnd WithEnd Sub
调用例子
Sub FormLoad()AddListViewHead 列表, Range("A1:D1").Valuetmp = SumArrRow(Range("a1:c4").Value, "1,3", True)AddListViewData 列表, tmpEnd Sub
ListView控件数据操作系列未完,待续!
——专注办公软件的二次开发及培训,你有问题,我有思路!
——微博、微信、CSDN同号:w_dexu。
——转载请注明出处!
扫码加微信