
在窗口显示数据时,经常会用到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应为True
Dim i As Integer, j As Integer
Dim DateCol() As String
Dim Itm As Object
Dim PartKey As String
If Not AddData Then ListViewName.ListItems.Clear
If IsArray(DateArr) Then
For 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)
Next
Next
Else
If IsEmpty(DateArr) Or DateArr = "没有记录" Then Exit Sub
DateCol = 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)
Next
End If
End 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 String
Dim SpWidth() As String
Dim SpAlign() As String
Dim CW As Integer
Dim CA As Integer
Dim i As Integer
ListViewName.ColumnHeaders.Clear
ListViewName.ListItems.Clear
SpWidth = Split(ColWidth, ",")
If UBound(SpWidth) = 0 Then CW = Val(ColWidth)
With ListViewName
If IsArray(ColHeader) Then
For 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 + AddWidth
If CW <0 Then CW = 0
.ColumnHeaders.Add , , ColHeader(0, i), CW
Next
Else
If ColHeader = " *** 作不成功" Then Exit Sub
SpHeader = 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 + AddWidth
If CW <0 Then CW = 0
.ColumnHeaders.Add , , SpHeader(i), CW
Next
End If
.View = lvwReport
.FullRowSelect = True
.Gridlines = True
End With
End Sub
调用例子
Sub FormLoad()
AddListViewHead 列表, Range("A1:D1").Value
tmp = SumArrRow(Range("a1:c4").Value, "1,3", True)
AddListViewData 列表, tmp
End Sub
ListView list = (ListView) findViewById(R.id.ListView01)
//生成动态数组,加入数据
ArrayList<HashMap<String, Object>>listItem = new ArrayList<HashMap<String, Object>>()
for(int i=0i<10i++)
{
HashMap<String, Object>map = new HashMap<String, Object>()
map.put("ItemImage", R.drawable.checked)//图像资源的ID
map.put("ItemTitle", "Level "+i)
map.put("ItemText", "Finished in 1 Min 54 Secs, 70 Moves! ")
listItem.add(map)
}
//生成适配器的Item和动态数组对应的元素
SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//数据源
R.layout.list_items,//ListItem的XML实现
//动态数组与ImageItem对应的子项
new String[] {"ItemImage","ItemTitle", "ItemText"},
//ImageItem的XML文件里面的一个ImageView,两个TextView ID
new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText}
)
//添加并且显示
list.setAdapter(listItemAdapter)
(一)我们先建立一个二维数组listView1.View
=
View.Details
listView1.Columns.Add("姓名")
listView1.Columns.Add("语文")
listView1.Columns.Add("数学")
listView1.Columns.Add("科学")
listView1.Columns.Add("英语")
string[,]
chengji
=
new
string[4,
5]
chengji[0,
0]
=
"小王"
chengji[0,
1]
=
"90"
chengji[0,
2]
=
"98"
chengji[0,
3]
=
"88"
chengji[0,
4]
=
"92"
chengji[1,
0]
=
"小李"
chengji[1,
1]
=
"92"
chengji[1,
2]
=
"94"
chengji[1,
3]
=
"98"
chengji[1,
4]
=
"93"
chengji[2,
0]
=
"小黄"
chengji[2,
1]
=
"91"
chengji[2,
2]
=
"92"
chengji[2,
3]
=
"93"
chengji[2,
4]
=
"94"
chengji[3,
0]
=
"小张"
chengji[3,
1]
=
"95"
chengji[3,
2]
=
"94"
chengji[3,
3]
=
"93"
chengji[3,
4]
=
"92"
(二)下面是几种分列显示二维数组的几种方法。
1、第一种分列显示方法:
listView1.Clear()
for
(int
i
=
0
i
<
chengji.GetLength(0)
i++)
{
ListViewItem
bb
=
new
ListViewItem(new
string[]
{
chengji[i,
0],
chengji[i,
1],
chengji[i,
2],
chengji[i,
3],
chengji[i,
4]
})
listView1.Items.Add(bb)
}
2、第二种分列显示方法:
上面的listview分列显示还可以用下面的方法。
listView1.Clear()
ListViewItem
cj
for
(int
i
=
0
i
<
chengji.GetLength(0)
i++)
{
cj
=
new
ListViewItem(chengji[i,0])
cj.SubItems.Add(chengji[i,
1])
cj.SubItems.Add(chengji[i,2])
cj.SubItems.Add(chengji[i,
3])
cj.SubItems.Add(chengji[i,
4])
listView1.Items.Add(cj)
3、第三种分列显示方法:
如果我们把二维数组转化为一维数组(即结合上面两种方法)还可以用下面的方法分列显示。
listView1.Clear()
ListViewItem
cjj
string[]
sstr
=
new
string[chengji.GetLength(1)]
for
(int
i
=
0
i
<
chengji.GetLength(0)
i++)
{
for
(int
j
=
0
j
<
chengji.GetLength(1)
j++)
{
sstr[j]
=
chengji[i,
j]
}
cjj
=
new
ListViewItem(sstr)
listView1.Items.Add(cjj)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)