Подэлементы Экземпляра Listview - PullRequest
0 голосов
/ 01 марта 2019

У меня есть цель заполнить представление списка из выходных данных запроса OleDb.Я могу правильно заполнить Предмет и один подпункт без проблем.Но у меня проблемы с определением остальных 4 подпунктов каждого элемента.

Как вы знаете, обычно вы определяете подэлементы с помощью

ListView1.Items(0).SubItems(1).Text = "Test Item 2"

Но я не могу понять, как это сделать при работе с экземпляром ListView, который заполняет мой Control 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

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Поздравляем с поиском исправления.Вы очень хорошо поработали со своим соединением, но соединения должны быть не только закрыты, но и удалены.Посмотрите на Использование блоков, которые заботятся о вас обоих.Они закроют и утилизируют ваши объекты базы данных даже в случае ошибки.

Вам не нужно создавать объект подэлементов для каждого подэлемента.Метод .Add коллекции подэлементов может принимать строку, которая предоставит текст для этого подэлемента.Внутренне он создаст подэлемент и добавит его в коллекцию.

Обратите внимание на использование .BeginUpdate и .EndUpdate в ListView.Если вы добавляете много предметов, это значительно ускорит процесс.Это предотвращает перекрашивание элемента управления при каждом добавлении.Он перекрасится один раз, когда вы закончите добавлять все элементы.

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
0 голосов
/ 01 марта 2019

Ну, у меня появилась идея после рассмотрения моего собственного вопроса, который я разместил здесь. Я понял:

Вам просто нужно определить второй подпункт ... О, да!

                '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)
...