Listview vba excel как добавить

Обновлено: 07.07.2024

Private Sub Form1_Load( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles MyBase .Load

Public Class Form1

Private Sub Button1_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles Button1.Click
If ListView1.Items.Count = 0 Then Return

Dim Item As ListViewItem = ListView1.Items(0)
Item.SubItems(0).Text = "ДАННЫЕ"
Item.SubItems(1).Text = "ПРОБЛЕМА"
End Sub


всё удачно добавляеться но в 1 колонку, если меняю индекс на

НИЧЕГО не добавляеться хотя всё есть, Columns'ы добавил, всё как надо, в чём тут может быть проблема?
Таким образом ты запишешь данные в ПЕРВЫЙ СТОЛБЕЦ ТРЕТЬЕЙ СТРОКИ. (при условии,что она у тебя существует. )
Ты должен понимать, что Items-это коллеция строк, а SubItems-это колекция колонок конкретной строки.
всё добавляеться попорядку, т.е с верху вниз, а если вот таким

всё записываеться в одну строку! т.е нашёл одно значение записал, нашол другое переписывает эту строку и так далее, а как можно заставить добавляться вниз по списку а не переписывать одну и туже строку?

Public Class Form1

Private Sub Button1_Click( ByVal sender As System. Object , ByVal e As System.EventArgs) Handles Button1.Click

'В теле ты должен создать строку и добавить её в ListView

For i As Integer = 1 To 10

'Создаешь новую строчку и добавляешь её в коллекцию Items
'В переменной MyRow у тебя будет ссылка на ВСЮ строку!!
Dim MyRow As ListViewItem = ListView1.Items.Add("Детали " & i) 'НУЛЕВОЙ СТОЛБЕЦ

'Дальше добавляем данные в остальные столбцы ЭТОЙ ЖЕ строки
MyRow.SubItems.Add("Проблема " & i) 'ПЕРВЫЙ СТОЛБЕЦ
MyRow.SubItems.Add("Ключ реестра " & i) 'ВТОРОЙ СТОЛБЕЦ
'И так заполняешь данными все столбцы твоей строки
'Если у тебя столбцов больше до добавь еще MyRow.SubItems.Add(. )
'столько раз сколько у тебя столбцов.
Next
'После выполнения этого кода твой ListView будет содержать 10 строк с данными
End Sub

Да чтож ты тут трудного нашел? это же проще пареной репы!!
По ходу ты так нифига и не понял что к чему.. ладно, давай еще раз и все с самого начала. следи за мыслью.
1.ListView имеет коллекцию строк, называется она Items
2. чтобы добавить строку в эту коллекцию ты должен вызвать метод Items.Add (пример вызова ты видел выше)
3. Каждая строка (ListViewItem) имеет коллекцию подстрок или другими словами SubItems, что в твоем случае косвенно можно назвать коллекцией столбцов..
4.Предположим у тебя есть 3 столбца.. При вызове метода Items.Add(т.е. при добавлении новой строки) автоматически создается элемент SubItems с индексом 0 (или SubItems(0)).. другими словами при добавлении строки ты сразу же (незаметно для себя) заполняешь НУЛЕВОЙ столбец. А вот чтобы заполнить остальные столбцы ты должен в коллекцию SubItems(подстрок) добавить снова данные.. а для этого ты снова должен вызвать метод Add.. но на сей раз уже НЕ для Items а для SubItems.. таким образом вызывая каждый раз метод SubItems.Add ты заполняешь остальные столбцы конкретной строки..
Идем дальше.. и вернемся немного назад..

Давай разберемся что у тебя тут происходит.. Покольку ты обращаетшься к строке с индексом НОЛЬ,и ЯВНО не указываешь какой то SubItems, то по умолчанию меняется значение в НУЛЕВОМ столбце!! Таким образом твоя запись будет абсолютна идентична этой..

Элемент управления ListView отображает данные как объекты ListItem. Каждый объект ListItem может связать необязательный значок с меткой объекта. Элемент управления превосходит другие при представлении подмножеств данных (типа членов базы данных) или обособленных объектов (типа шаблонов документа).

Возможное применение
  • Отображение результатов запроса базы данных.
  • Отображение всех отчетов в таблице базы данных.
  • В тандеме с элементом управления Treeview дать пользователю расширенное представление ноуда элемента управления TreeView.
Четыре различных доступных режима просмотра

Элемент управления ListView может отображать данные в четырех различных режимах просмотра (как показано на рис. 2.7-2.10). Программирование элемента управления может зависеть от того, какой из режимов просмотра вы предлагаете пользователю.

Каждый из этих режимов имеет свои преимущества. Некоторые из них перечислены в следующей таблице:

Преимущества

Значки. Может управляться мышью, позволяя пользователю перетащить и опустить объект и перестраивать объекты.

Мелкие значки. Позволяет увидеть больше объектов ListItem. Как и в режиме Icon, объекты могут быть перестроены пользователем.

Список. Представляет сортируемый список объектов ListItem.

Таблица. Представляет сортируемый список с колонками, позволяющими отобразить дополнительную информацию.

Рис. 7A.7 ListView в режиме Icon

Рис. 7A.8 ListView в режиме SmallIcon

Рис. 7A.9 ListView в режиме List

Рис. 7A.10 ListView в режиме Report

Изменение режима просмотра свойством View

Чтобы изменить режим визуального отображения, используйте свойство View. Следующий код устанавливает свойство View в режим Report (3), используя встроенную константу lvwReport:

' Имя элемента управления - "ListView1"
ListView1.View = lvwReport

Используя свойство View, можно разрешить пользователю динамически изменять вид. В событии формы Load заполняется ComboBox с вариантами выбора отображения:

Private Sub Form_Load()
' Заполнение элемента управления ComboBox.
' Имя элемента управления ComboBox - "cmbChooseView".
With cmbChooseView
.AddItem "Значки" ' 0
.AddItem "Мелкие значки" ' 1
.AddItem "Список" ' 2
.AddItem "Таблица" ' 3
End With
End Sub

В событии Click элемента управления ComboBox настройка вида элемента управления может быть сброшена:

Private Sub cmbChooseView_Click()
' Имя элемента управления ListView - "lvwDB".
lvwDB.View = cmbChooseView.ListIndex
End Sub

Два элемента управления ImageList для Icons и SmallIcons

Объект ListItem состоит из подписи (свойство Text) и необязательного изображения, которое снабжается элементом управления ImageList. Однако элемент управления ListView, в отличие от других элементов управления, может использовать два элемента управления ImageList, которые можно установить для использования свойств Icons и SmallIcons. Сколько использовать элементов управления ImageList - один или оба, зависит от выбранного режима визуального отображения, определенного свойством View.

В режимах List, SmallIcon и Report можно использовать для представления объекта ListItem маленький значок. Один элемент управления ImageList (указанный свойством SmallIcons) поставит изображения для использования в любом из этих трех режимов. Во время разработки или выполнения установите свойство SmallIcons на элемент управления ImageList, и он снабдит ListView этими изображениями. Во время разработки, чтобы установить ImageList для SmallIcons, используйте окно диалога страниц свойств элемента управления ListView. Во время выполнения используйте следующий код:

Напротив, когда элемент управления находится в режиме Icon, элемент управления использует другой набор изображений, снабженных вторым элементом управления ImageList. Установите свойство Icons на этот второй ImageList во время разработки, используя окно диалога страниц свойств, или напишите следующий код для установки во время выполнения:

Примечание Размер значков, которые вы используете, определен элементом управления ImageList. Доступны размеры 16x16, 32x32, 48x48, и Custom (заказные).

Если вы планируете использовать больше одного режима отображения и хотите отобразить значки, установите свойства SmallIcon и Icon для каждого объекта ListItem. Следующий код сначала объявляет объектную переменную типа ListItem, затем устанавливает объектную переменную на единственный объект ListItem, добавленный в коллекцию методом Add. Тогда изображения SmallIcon и Icon устанавливаются ссылкой на объектную переменную:

Dim itmX As ListItem
Set itmX = ListView1.ListItems.Add()
' Предположим, что изображение с именем "smallBook" существует
' в ImageList, на который установлено свойство SmallIcons.
itmX.SmallIcon = "smallBook"
' Предположим, что изображение с именем "BigBook" существует
' в ImageList, на который установлено свойство Icons.
itmX.Icon = "BigBook"

После установки изображения свойствами SmallIcon и Icon правильное изображение будет автоматически отображаться при переключении видов, используя свойство View.

Отображение ColumnHeaders в режиме Report

Специфическая особенность режима Report - объекты ColumnHeader. Объекты ColumnHeader элемент управления ListView содержит в коллекции ColumnHeaders. ColumnHeader показан на рис. 7A.11:

Рис. 7A.11 ColumnHeader

Объект ColumnHeader имеет свойство Text, которое отображает текст, когда элемент управления находится в реджиме Report. Еще можно установить свойство Width каждой колонки ColumnHeader, а также свойство Alignment (которое устанавливает выравнивание текста, отображенного в ColumnHeader). Следующий пример кода создает четыре объекта ColumnHeader и устанавливает их свойства Text и Width:

Dim colX As ColumnHeader ' Объявление переменной.
Dim intX As Integer ' Переменная счетчика.
For intX = 1 To 4
Set colX = ListView1.ColumnHeaders.Add()
colX.Text = "Field " & intX
colX.Width = ListView1.Width / 4
Next intX

Настройка текста колонки свойством SubItems

Обратите внимание, что в любом из видов, кроме Report, объект ListItem отображает только одну подпись - свойство Text. Но в режиме Report каждый объект ListItem может иметь несколько других текстовых пунктов. Например, в рис. 2.11 "Путешествие автостопом по Visual Basic. " имеет подпункты "автор" ("Вон, Уильям Р."), "год" (1996) и "номер ISBN", связанные с ним. Каждый из этих текстовых пунктов - свойства объекта ListItem, определенные его свойством SubItems. Далее, поскольку может иметься любое число этих текстовых пунктов, свойство SubItems - это, фактически, массив строк. Таким образом, чтобы установить автора, год и номер ISBN объекта ListItem, код мог бы выглядеть следующим образом:

' Имя элемента управления - lvwAuthors.
lvwAuthor.ListItems(23).Text = _
"Hitchhiker's Guide to Visual Basic and SQL Server"
lvwAuthor.ListItems(23).SubItems(1)= _
"Vaughn, William R."
lvwAuthor.ListItems(23).SubItems(2)= "1996"
lvwAuthor.ListItems(23).SubItems(3)= " 1-55615-906-4"

Подпункты зависят от наличия ColumnHeaders

И наличие, и количество подпунктов зависят от наличия и количества объектов ColumnHeader. То есть нельзя установить какие-либо подпункты, если нет никаких объектов ColumnHeader. Далее, количество объектов ColumnHeader определяет число подпунктов, которые можно установить для объекта ListItem. И количество подпунктов всегда на один меньше, чем количество объектов ColumnHeader. Это происходит потому, что первый объект ColumnHeader всегда связан со свойством Text объекта ListItem, как показано на рис. 7A.12:

Рис. 7A.12 Первый ColumnHeader и подпункты

Таким образом, если число объектов ColumnHeader в вышеупомянутом примере - 4, то максимальный возможное число подпунктов, которые можно установить - 3.

Данный пост написан по мотивам статьи с codeproject “ListView in-line editing”.

listTreeView pic1

Исходный код доступен на GitHub.

В этом случае нам поможет TextBox. Как использовать данную методику я покажу на примере. В нашем распоряжении будет таблица с двумя столбцами Address и Value. При этом редактируемой может быть только ячейка в столбце Value. Таблица реализована при помощи элемента ListView и называется lvTable.

Идея подхода следующая: на форму мы поместим TextBox элемент (tbCell), он будет подставляться на место ячейки, данные который мы ходим изменить. Изменение осуществляется двойным щелчком левой кнопки мыши по соответствующей ячейке, после этого информация из нее будет скопирована в tbCell, доступный для редактирования. Для сохранения данных нужно нажать Enter или убрать фокус с элемента.

Далее предлагаю описание реализации в виде последовательности действий. Исходный код проекта прилагается к статье.

Шаг 1

На форме располагаем все необходимые элементы: ListView, TextBox, и настраиваем их.

Добавим два столбца (Address и Value) на ListView, для этого нужно щелкнуть по значению свойства Columns и в появившемся окне сделать необходимые правки.

listTreeView_pic2

Форма будет выглядеть примерно так, как показано ниже.

Шаг 2

Добавим загрузку демо данных на форму, для этого создадим обработчик события Load для формы и назовем его Form1_Load. После этого добавим в него код, заполняющий таблицу данными.

Добавим обработчики событий для наших элементов.

Шаг 3

Добавим в обработчики событий код, который позволяет “редактировать” ячейки таблицы.

Создадим три глобальных переменных.

Заполним кодом обработчики событий.

В своем проекте, на этом этапе, вам будет необходимо внести в обработчики событий свои коррективы: проверка вводимых данных и т.п.
На этом все, спасибо!

Данный пост написан по мотивам статьи с codeproject “ListView in-line editing”.

listTreeView pic1

Исходный код доступен на GitHub.

В этом случае нам поможет TextBox. Как использовать данную методику я покажу на примере. В нашем распоряжении будет таблица с двумя столбцами Address и Value. При этом редактируемой может быть только ячейка в столбце Value. Таблица реализована при помощи элемента ListView и называется lvTable.

Идея подхода следующая: на форму мы поместим TextBox элемент (tbCell), он будет подставляться на место ячейки, данные который мы ходим изменить. Изменение осуществляется двойным щелчком левой кнопки мыши по соответствующей ячейке, после этого информация из нее будет скопирована в tbCell, доступный для редактирования. Для сохранения данных нужно нажать Enter или убрать фокус с элемента.

Далее предлагаю описание реализации в виде последовательности действий. Исходный код проекта прилагается к статье.

Шаг 1

На форме располагаем все необходимые элементы: ListView, TextBox, и настраиваем их.

Добавим два столбца (Address и Value) на ListView, для этого нужно щелкнуть по значению свойства Columns и в появившемся окне сделать необходимые правки.

listTreeView_pic2

Форма будет выглядеть примерно так, как показано ниже.

Шаг 2

Добавим загрузку демо данных на форму, для этого создадим обработчик события Load для формы и назовем его Form1_Load. После этого добавим в него код, заполняющий таблицу данными.

Добавим обработчики событий для наших элементов.

Шаг 3

Добавим в обработчики событий код, который позволяет “редактировать” ячейки таблицы.

Создадим три глобальных переменных.

Заполним кодом обработчики событий.

В своем проекте, на этом этапе, вам будет необходимо внести в обработчики событий свои коррективы: проверка вводимых данных и т.п.
На этом все, спасибо!

Читайте также: