Получение данных из элемента управления ListView - PullRequest
1 голос
/ 15 апреля 2010

У меня есть элемент управления ListView, настроенный в режиме подробностей с 5 столбцами. Он заполняется кодом с использованием следующей подпрограммы:

            For j = 0 To 14
                cmd = New OleDbCommand("SELECT TeacherName, ClassSubject, BookingDate, BookingPeriod FROM " & SchemaTable.Rows(i)!TABLE_NAME.ToString() & " WHERE (((BookingDate)=" & Chr(34) & Date.Today.AddDays(j) & Chr(34) & ") AND ((UserName)=" & Chr(34) & user & Chr(34) & "));", cn)
                dr = cmd.ExecuteReader
                Dim itm As ListViewItem
                Dim itms(4) As String
                While dr.Read()
                    itms(0) = dr(0)
                    itms(1) = SchemaTable.Rows(i)!TABLE_NAME.ToString()
                    itms(2) = dr(1)
                    itms(3) = dr(2)
                    itms(4) = dr(3)
                    itm = New ListViewItem(itms)
                    Manage.ManageList.Items.Add(itm)
                End While
            Next

Обратите внимание, что это не полная процедура, а бит, заполняющий сетку.

Теперь мне нужно получить данные из элемента управления ListView, чтобы удалить бронирование в моей базе данных. Я использовал следующий код для извлечения содержимого каждого столбца:

ManageList.SelectedItems(0).Text

Но похоже, что он работает только с индексом 0. Если я это сделаю:

ManageList.SelectedItems(3).Text

Я получаю эту ошибку:

InvalidArgument = Значение '3' не является действителен для «индекса». Имя параметра: Индекс

Я в значительной степени озадачен, мне кажется логичным, что индекс 1 будет указывать на 2-й столбец, индекс 2 на 3-й и т. Д., Поскольку он основан на 0?

Любая помощь будет оценена, спасибо.

Ответы [ 2 ]

1 голос
/ 15 апреля 2010

Когда вы говорите ManageList.SelectedItems(3).Text, вы запрашиваете четвертый элемент, выбранный в вашем списке, а не четвертый столбец выбранного элемента.

См. MSDN

РЕДАКТИРОВАТЬ: Подумайте об этом следующим образом: ManageList.SelectedItems(0)=itms, который является строковым массивом. В следующем примере показано, как получить доступ к четвертому значению массива выбранного массива в списке:

Dim itms() As String = ManageList.SelectedItems(0)
If itms.Length>3 Then
    itms(3).DoWhatever
End If
0 голосов
/ 15 апреля 2010

Метод SelectedItems возвращает выбранные элементы ListViewItem. Чтобы получить доступ к отдельным столбцам внутри, используйте свойство SubItems .

Примечание из документации:

Первый подпункт в ListViewItem.ListViewSubItemCollection всегда предмет, который владеет подпункты. При выполнении операций по подпунктам в коллекции обязательно вместо этого ссылаться на позицию индекса 1 0, чтобы внести изменения в первый подпозиция.

...