我的目标是从OleDb查询的输出数据填充列表视图。我可以正确地填充项目和一个子项目。但是我很难定义每个项目的其他4个子项目。
如您所知,通常使用
定义子项ListView1.Items(0).SubItems(1).Text = "Test Item 2"
但是当使用在运行时填充我的Control Listview的Listview实例时,我不知道该怎么做。
这是我的代码,它成功地填充了一个项目和一个子项目:
Dim conn As New System.Data.OleDb.OleDbConnection(connectionString)
Dim com As System.Data.OleDb.OleDbCommand
Dim reader As System.Data.OleDb.OleDbDataReader
Try
'Open the connection
conn.Open()
'Create a new instance of the command and provide the SELECT query, and the opened connection
com = New System.Data.OleDb.OleDbCommand("SELECT * FROM Schedules", conn)
reader = com.ExecuteReader(CommandBehavior.CloseConnection)
'Check to see if the SELECT query returned any rows
If reader.HasRows Then
'If so, perform a read for each row
While reader.Read
'Declare a new ListViewItem, and provide the information
'to be shown in the very first column
Dim item As New ListViewItem(reader.Item("colName").ToString)
'Decare a new ListViewSubItem, and provide the information
'to be shown in the second (and so forth) column
Dim subItem As New ListViewItem.ListViewSubItem
subItem.Text = reader.Item("colNextRun").ToString
'Ideally, I'd like to add "colLastRun as another sub item
'subItem1.Text = reader.Item("colLastRun").ToString
'Add the ListViewSubItem to the ListViewItem
item.SubItems.Add(subItem)
'Add the ListViewItem to the ListView
lv.Items.Add(item)
'Repeat until all rows have been read
End While
End If
'Close the reader
reader.Close()
Catch ex As Exception
'If something went sideways, make sure that you close the connection
'before exiting the method.
If conn.State = ConnectionState.Open Then
'MsgBox(ex.Message)
conn.Close()
End If
End Try
答案 0 :(得分:0)
好吧,我回顾了我在这里发布的问题后,有了一个主意。 我知道了:
您只需要定义第二个子项即可。
'Decare a new ListViewSubItem, and provide the information
'to be shown in the second (and so forth) column
Dim subItem As New ListViewItem.ListViewSubItem
Dim subItem1 As New ListViewItem.ListViewSubItem()
Dim subItem2 As New ListViewItem.ListViewSubItem
subItem.Text = reader.Item("colNextRun").ToString
subItem1.Text = reader.Item("colLastRun").ToString
subItem2.Text = reader.Item("colFileLocation").ToString
'Add the ListViewSubItem to the ListViewItem
item.SubItems.Add(subItem)
item.SubItems.Add(subItem1)
item.SubItems.Add(subItem2)
答案 1 :(得分:0)
恭喜您找出解决方案。您在连接方面做得非常好,但是不仅需要关闭连接,而且还必须处理掉连接。查看使用可为您兼顾的模块。即使出现错误,它们也会关闭并处置您的数据库对象。
您无需为每个子项目创建一个子项目对象。子项集合的.Add方法可以使用一个字符串,该字符串将提供该子项的文本。在内部,它将创建子项并将其添加到集合中。
请注意在ListView上使用.BeginUpdate
和.EndUpdate
。如果要添加许多项目,这将大大加快速度。它可以防止控件在每次添加时重新绘制。完成添加所有项目后,它将重新绘制一次。
Private Sub FillListView()
Using conn As New OleDbConnection("Your connection string")
Using cmd As New OleDbCommand("SELECT * FROM Schedules", conn)
conn.Open()
Using reader = cmd.ExecuteReader
ListView1.BeginUpdate()
While reader.Read
Dim item As New ListViewItem(reader.Item("colName").ToString)
item.SubItems.Add(reader.Item("NextcolName").ToString)
item.SubItems.Add(reader.Item("NextcolName").ToString)
item.SubItems.Add(reader.Item("NextcolName").ToString)
ListView1.Items.Add(item)
End While
ListView1.EndUpdate()
End Using
End Using
End Using
End Sub