在vb6的listview中的每个子项中显示记录

时间:2014-12-01 12:10:06

标签: listview vb6

在我的程序中,我使用LIKE语句在sql查询中使用listview的第1项,并在同一listview的子项中显示结果。 listview的第一列共有100个项目,我想要listview的子项目中的记录。我为每个项目使用了复选框,然后选中所有复选框以显示结果。当检查单个项目并执行查询时,它在子项目中显示正确的结果,但是当我检查所有项目并执行查询时,它在每个子项目中显示相同的结果。

离。

query= "select  name from company where product LIKE  '" & ListView1.ListItems(I) & "'"
For I = 1 To ListView1.ListItems.Count
  If ListView1.ListItems(I).Checked = True Then
    List.SubItems(2) = ListView1.ListItems(I).ListSubItems.Add(, , my_Recordset1.Fields(0))
  End If
Next

当我执行查询时,它显示所有子项目的相同结果。

1 个答案:

答案 0 :(得分:1)

查看您上面提到的代码,我认为您的选择位置错误了。如果内存为我服务,ListItems是基于0的,所以你要求的是listview中第一项的文本。尝试移动if语句中的选择代码,看看是否有帮助。它看起来与此类似:

For I = 1 To ListView1.ListItems.Count 
    If ListView1.ListItems(I).Checked = True Then 
        ex. query= "select name from company where product LIKE '" & ListView1.ListItems(I) & "'" 
        List.SubItems(2) = ListView1.ListItems(I).ListSubItems.Add(, , my_Recordset1.Fields(0)) 
    End If
Next I

这样您就可以获得正在查看的列表项的正确信息。 当您更改代码时,请查看...每个VB6 For each,当您执行此类操作时,值得一看。


继续下面的评论,您需要将while放在for语句中,以便您的代码看起来像这样:

For i = 0 To ListView1.ListItems.Count -1
If ListView1.ListItems(i).Checked = True Then 
    sSql1 = "select name from company where product LIKE '" & ListView1.ListItems(I) & "'" 

    my_Recordset1.Open sSql1, Conn1, adOpenDynamic, adLockOptimistic my_Recordset1.MoveFirst 
    While Not my_Recordset1.EOF 
        list.SubItems(2) = list.SubItems(2) & " " & ListView1.ListItems(i).ListSubItems.Add(, , my_Recordset1.Fields(0)) 
        my_Recordset1.MoveNext 
    Wend
End If 
Next

我已经改变了for语句从0开始,另一个小改动是你在SubItems(2)中设置值的地方所以它将连接所有项目而不是仅仅放置最后一个你可以在记录集中找到一个。