VB6之ListView控件实现单选、多选、更新选定列内容
数据库编程中经常用到ListView控件实现选择后更新选定列内容的操作,通过该文档,读者可以更好的理解ListView控件的常用属性及方法。从而使数据库操作更加友好,直观。
很多读者在使用该控件的时候都会遇到第一列填充不了内容的情况。该情况是因为ListView控件的第一列(图中红色方框所示)和后面的列(图中蓝色方框所示)表示方法不一样。
红色方框部分用ListView1.ListItems.Add方法表示并添加。 蓝色方框部分用itmX.SubItems(i)方法表示并添加。起始索引为1 。
本文将详细讲述ListView1实现上图所示功能。
本文的数据库链接已经定义在标准模块中。具体代码如下:
Public Function cnn() As ADODB.Connection Set cnn = New ADODB.Connection
cnn.Open \Info=True;User ID=ldg;Initial Catalog=ldg;Data Source=172.30.76.249\
End Function
一、将数据库内容添加到ListView1控件中
请注意设置ListView1的view、Checkboxs属性。Form_Load具体代码如下:
Private Sub Form_Load()
'设置ListView1的样式为报表样式 ListView1.View = lvwReport '设置ListView1可以复选
ListView1.Checkboxes = True
'声明一个记录集
Dim rs As ADODB.Recordset '设置一个新的记录集
Set rs = New ADODB.Recordset '打开表wink
rs.Open \
'设置ListView1的列标题 Dim clmX As ColumnHeader
Set clmX = ListView1.ColumnHeaders.Add(, , \ Set clmX = ListView1.ColumnHeaders.Add(, , \ Set clmX = ListView1.ColumnHeaders.Add(, , \ Set clmX = ListView1.ColumnHeaders.Add(, , \
Set clmX = ListView1.ColumnHeaders.Add(, , \ Set clmX = ListView1.ColumnHeaders.Add(, , \
'将数据库内容添加到ListView1中 Dim itmX As ListItem While Not rs.EOF
Set itmX = ListView1.ListItems.Add(, , rs.Fields(\
If Not IsNull(rs!Name) Then
itmX.SubItems(1) = rs.Fields(\ End If
If Not IsNull(rs!sex) Then
itmX.SubItems(2) = rs.Fields(\ End If
If Not IsNull(rs!age) Then
itmX.SubItems(3) = rs.Fields(\ End If
If Not IsNull(rs!address) Then
itmX.SubItems(4) = rs.Fields(\ End If
If Not IsNull(rs!birth) Then
itmX.SubItems(5) = rs.Fields(\ End If
'移动到下一条记录。 rs.MoveNext Wend End Sub
二、实现单选功能
将选定的单元格内容输出到Text1控件中。请读者注意第一列表示方法为ListView1.ListItems(i).SubItems(1)。
Private Sub Command1_Click() '单选
For i = 1 To ListView1.ListItems.Count
'如果复选框打“√”则把打对号行的第一列内容显示在文本框中。 If ListView1.ListItems(i).Checked = True Then Text1.Text = ListView1.ListItems(i).SubItems(1) End If Next End Sub
三、实现全选功能
通过循环将所有ListView1.ListItems(i).Checked属性设置为true。
Private Sub Command2_Click() '循环至ListView1的总记录数
For i = 1 To ListView1.ListItems.Count '全选
ListView1.ListItems(i).Checked = True Next End Sub
四、实现全不选功能
通过循环将所有ListView1.ListItems(i).Checked属性设置为false。
Private Sub Command3_Click() '循环至ListView1的总记录数
For i = 1 To ListView1.ListItems.Count '全不选
ListView1.ListItems(i).Checked = False Next End Sub
五、实现更新选定列功能 重头戏来了。
通过循环将已经选择的内容放置在数组中。VB6中无可变数组,只好定义了一个100个元素的数组。读者可以根据自己的实际情况进行定义。但不要定义过大以减少系统资源消耗。
通过循环将选定的行的指定列进行更新数据库操作。该实例是将选定列的性别进行更新。读者可以根据自己的实际情况更新一列或若干列内容。
Private Sub Command4_Click() '多选
'定义一个100个元素的一维数组 Dim tmpArry(100) As String '循环获得第i行,第一列的内容 Dim j As Integer j = -1
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Checked Then j = j + 1
tmpArry(j) = ListView1.ListItems(i).SubItems(1) End If Next
'循环更新第i行,第一列内容 Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset For k = 0 To j
rs2.Open \adOpenKeyset, adLockOptimistic
rs2.Fields(\ rs2.Update rs2.Close Next
'刷新ListView1控件中的内容 ListView1.ListItems.Clear Call Form_Load
' 循环输出数组,测试用 ' tmp = \
' For k = 0 To j
' tmp = tmp & tmpArry(k) & \' Next
' Text2.Text = tmp End Sub
总结:ListView控件功能十分丰富,可以设置按列标题进行排序,并且可以很好的设置隔行颜色等功能。是一个很好用的数据控件。本文中向控件ListView1添加数据方法较为繁琐,读者可以通过设置数据库字段内容不为空后直接循环添加,或者按照自己的思路进行添加。