【发布时间】:2014-07-25 15:45:46
【问题描述】:
如何将数据库查询结果填充到列表视图。我遇到了“Form1.ListView1.Items(i).SubItems(1).Text = myRow.Item(0)”行的问题。
Dim cn As New SqlConnection()
Dim WFTeam As New DataSet()
Dim da As SqlDataAdapter
Dim cmdBuilder As SqlCommandBuilder
Dim myRow As DataRow
Dim dt As New DataTable
Dim strSqlStm As String = ""
Dim strConnectionString As String = ""
strSqlStm = "SELECT [SRF#], [FirstName], [LastName] FROM [Agent] WHERE [TeamLeaderNo] = 103"
cn.ConnectionString = strDataSource & "Initial Catalog=EmployeeDatabase;" & strUID & strPassword
cn.Open()
da = New SqlDataAdapter(strSqlStm, cn)
cmdBuilder = New SqlCommandBuilder(da)
da.Fill(WFTeam, "Team")
WFTeam.Tables.Add(dt)
da.Fill(dt)
Form1.ListView1.Items.Clear()
Dim i As Integer = 1
For Each myRow In dt.Rows
If Not IsDBNull(myRow.Item(0)) Then
Form1.ListView1.Items(i).SubItems(1).Text = myRow.Item(0)
End If
If Not IsDBNull(myRow.Item(1)) Then
Form1.ListView1.Items(i).SubItems(2).Text = myRow.Item(1)
End If
If Not IsDBNull(myRow.Item(2)) Then
Form1.ListView1.Items(i).SubItems(3).Text = myRow.Item(2)
End If
i = i + 1
Next
cn.Close()
以下代码有效,但我需要像 Excel 一样访问特定项目
For Each myRow In dt.Rows
If Not IsDBNull(myRow.Item(0)) Then
Form1.ListView1.Items.Add(myRow.Item(0))
'Form1.ListView1.Items(i).SubItems(1).Text = myRow.Item(0)
End If
If Not IsDBNull(myRow.Item(1)) Then
Form1.ListView1.Items(Form1.ListView1.Items.Count - 1).SubItems.Add(myRow.Item(1))
'Form1.ListView1.Items(i).SubItems(2).Text = myRow.Item(1)
End If
If Not IsDBNull(myRow.Item(2)) Then
Form1.ListView1.Items(Form1.ListView1.Items.Count - 1).SubItems.Add(myRow.Item(2))
'Form1.ListView1.Items(i).SubItems(3).Text = myRow.Item(2)
End If
i = i + 1
Next
【问题讨论】:
-
马上我可以看到您正在尝试添加到一个不存在的项目。您已经清除了
ListView1.Items,然后立即尝试设置Items(1).SubItems(1)的值。您需要先发送ListView1.Items.Add()。 -
“有问题”的描述性不是很好。我可以看到你清除物品;这意味着您需要使用 LV 的新数据创建新项目。清除后没有项目或子项目
-
当第一项为 DbNull 时,新代码将不起作用 - 没有项时无法添加子项。当
myRow.Item(1)为DbNull 时,它还将myRow.Item(2)放在第1 列中。