Страница: 1 |
|
Вопрос: ListView, как сделать сетку, или это не ListView?
|
Добавлено: 04.06.06 20:39
|
|
Автор вопроса: ZXC
|
Вообщем нужно сделать как бы таблицу и сетку, как на этом скриншоте:
http://img437.imageshack.us/img437/4458/12fv1.jpg
я чото разобраться не могу в каком элементе в VB.NET 2005 сделать такую сетку? в моём учебнике про такой элемент не слова :( подскажите, и если не трудно можно маленький пример? :)
Ответить
|
Номер ответа: 2 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #2
|
Добавлено: 04.06.06 23:07
|
Private Sub Form1_Load( ByVal sender As System. Object, ByVal e As System.EventArgs) Handles MyBase.Load
With ListView1
.View = View.Details
.CheckBoxes = True
.GridLines = True
.Columns.Add("MyColumn 1", 150, HorizontalAlignment.Left)
.Columns.Add("MyColumn 2", 150, HorizontalAlignment.Center)
.FullRowSelect = True
End With
Dim Item As ListViewItem = ListView1.Items.Add("MyRow 1"
Item.SubItems.Add("MyRow 1 Details"
Item.Checked = True
End Sub
Ответить
|
Номер ответа: 3 Автор ответа: ZXC
Вопросов: 30 Ответов: 106
|
Профиль | | #3
|
Добавлено: 05.06.06 08:58
|
Спасибо! всё как надо, ещё вопрос, как добавить Items в нужный мне Columns, а то всё добавляеться в первый, если по скрину то: нужно добавлять в ДАННЫЕ а всё добавляеться в ПРОБЛЕМА, спасибо
Ответить
|
Номер ответа: 4 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #4
|
Добавлено: 05.06.06 09:17
|
Public Class Form1
Private Sub Form1_Load( ByVal sender As System. Object, ByVal e As System.EventArgs) Handles MyBase.Load
With ListView1
.View = View.Details
.CheckBoxes = True
.GridLines = True
.Columns.Add("MyColumn 1", 150, HorizontalAlignment.Left)
.Columns.Add("MyColumn 2", 150, HorizontalAlignment.Center)
.FullRowSelect = True
End With
Dim Item As ListViewItem = ListView1.Items.Add("MyRow 1"
Item.SubItems.Add("MyRow 1 Details"
Item.Checked = True
End Sub
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
End Class
Ответить
|
Номер ответа: 5 Автор ответа: ZXC
Вопросов: 30 Ответов: 106
|
Профиль | | #5
|
Добавлено: 05.06.06 13:08
|
ListView1.Items(0).Text = "тест"
всё удачно добавляеться но в 1 колонку, если меняю индекс на
ListView1.Items(2).Text = "тест"
НИЧЕГО не добавляеться хотя всё есть, Columns'ы добавил, всё как надо, в чём тут может быть проблема?
Ответить
|
Номер ответа: 8 Автор ответа: ZXC
Вопросов: 30 Ответов: 106
|
Профиль | | #8
|
Добавлено: 05.06.06 14:07
|
)) новая проблема )
У меня есть цикл For, и так, в цикле ищеться информация в txt файле и если строка подходит под описание она должна добавляться в 1 колонку, вот таким способом
ListView1.Items(0).Text = "тест"
всё добавляеться попорядку, т.е с верху вниз, а если вот таким
Item.SubItems(0).Text = "тест"
всё записываеться в одну строку! т.е нашёл одно значение записал, нашол другое переписывает эту строку и так далее, а как можно заставить добавляться вниз по списку а не переписывать одну и туже строку?
Ответить
|
Номер ответа: 9 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #9
|
Добавлено: 05.06.06 15:05
|
ZXC,
блин, старик.. ну ты даешь! )))) ну в конце концов.. ну так же нельзя.. ну ты хоть мой пример-то глянь!!!
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With ListView1
.View = View.Details
.CheckBoxes = True
.GridLines = True
.Columns.Add("Детали", 150, HorizontalAlignment.Left)
.Columns.Add("Проблема", 150, HorizontalAlignment.Left)
.Columns.Add("Ключ реестра", 150, HorizontalAlignment.Left)
.FullRowSelect = True
End With
End Sub
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
End Class
Ответить
|
Номер ответа: 12 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #12
|
Добавлено: 05.06.06 22:28
|
а чо так всё трудно? я думал полегче будет.... (
Да чтож ты тут трудного нашел? это же проще пареной репы!!
По ходу ты так нифига и не понял что к чему.. ладно, давай еще раз и все с самого начала... следи за мыслью...
1.ListView имеет коллекцию строк, называется она Items
2. чтобы добавить строку в эту коллекцию ты должен вызвать метод Items.Add (пример вызова ты видел выше)
3. Каждая строка (ListViewItem) имеет коллекцию подстрок или другими словами SubItems, что в твоем случае косвенно можно назвать коллекцией столбцов..
4.Предположим у тебя есть 3 столбца.. При вызове метода Items.Add(т.е. при добавлении новой строки) автоматически создается элемент SubItems с индексом 0 (или SubItems(0)).. другими словами при добавлении строки ты сразу же (незаметно для себя) заполняешь НУЛЕВОЙ столбец... А вот чтобы заполнить остальные столбцы ты должен в коллекцию SubItems(подстрок) добавить снова данные.. а для этого ты снова должен вызвать метод Add.. но на сей раз уже НЕ для Items а для SubItems.. таким образом вызывая каждый раз метод SubItems.Add ты заполняешь остальные столбцы конкретной строки..
Идем дальше.. и вернемся немного назад..
ListView1.Items(0).Text = "тест"
Давай разберемся что у тебя тут происходит.. Покольку ты обращаетшься к строке с индексом НОЛЬ,и ЯВНО не указываешь какой то SubItems, то по умолчанию меняется значение в НУЛЕВОМ столбце!! Таким образом твоя запись будет абсолютна идентична этой..
ListView1.Items(0).SubItems(0).Text = "тест"
Мысль улавливаешь???
Так вот, чтобы изменить данные во ВТОРОМ столбце НУЛЕВОЙ СТРОКИ (поскольку ты указал 0) ты должен написать следующее:
ListView1.Items(0).SubItems(1).Text = "тест"
Лично я не люблю такую нотацию, поэтому я обычно пишу так:
Dim Item As ListViewItem = ListView1.Items(0)
Тем самым получаю ссылку на нужную мне строку. ( в данном случае на нулевую строку при условии что она у тебя УЖЕ создана)
Точно так же ты получаешь ссылку на строку вызывая метод Add
Dim Item As ListViewItem = ListView1.Items.Add("MyRow 1"
Только в этом случае ты получаешь ссылку на только что добавленную(новую) строку!!
Итак, когда у тебя есть ссылка на строчку, ты можешь работать с коллекцией столбцов ЭТОЙ строки
Item.SubItems.Add("MyRow 1 Details"
т.е. тут мы заполнили данными следуйщий столбец и т.д...
Идем дальше...
Предположим у тебя есть 5 готовых строк..
чтобы изменить данные скажем во втором столбце третьей строки ты должен написать следущее:
ListView1.Items(2).SubItems(1).Text = "тест"
где,2-это третья строка,1-второй столбец (поскольку нумерация начинается с нуля)
НО!!! если ты при создании строки не вызывал SubItems.Add для того чтобы запонить второй столбец, значит при попытке изменить в нем данные ты получишь ошибку.. так как на момент вызова этот эелемент коллекции у тебя будет равен Nothing..
Надеюсь понятно объяснил??? Если же нет... увы, на большее я не способен.. и помочь больше мне нечем...
Ответить
|
Страница: 1 |
Поиск по форуму