Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: ListView, как сделать сетку, или это не ListView? Добавлено: 04.06.06 20:39  

Автор вопроса:  ZXC
Вообщем нужно сделать как бы таблицу и сетку, как на этом скриншоте:
http://img437.imageshack.us/img437/4458/12fv1.jpg
я чото разобраться не могу в каком элементе в VB.NET 2005 сделать такую сетку? в моём учебнике про такой элемент не слова :( подскажите, и если не трудно можно маленький пример? :)

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 04.06.06 22:58
Ты абсолютно прав, это обычный ListView..
Тебе надо лишь установить соответствуйщий стиль контрола в свойствах и там же сделать,чтобы он отображал CheckBox'ы...

Ответить

Номер ответа: 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'ы добавил, всё как надо, в чём тут может быть проблема?

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 05.06.06 13:31
А никакой проблемы нет.. эт ручки у тебя кривые и глаза невнимательные! :-)))
Для доступа к данным используется коллекция SubItems!!!
Я вообще пример для чего писал?????????
ListView1.Items(2).Text = "тест"

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

Ответить

Номер ответа: 7
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #7 Добавлено: 05.06.06 13:44
:-))))))) терь понятно! спасиб!

Ответить

Номер ответа: 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


Ответить

Номер ответа: 10
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #10 Добавлено: 05.06.06 17:49
а чо так всё трудно? :) я думал полегче будет....:(( в бэйсике всё должно быть просто :)
Вот это я считаю просто:
ListView1.Items(0).Text = "тест"
Но вечно в 0 добавляеться :( попробую разобраться с твоими примерами

Ответить

Номер ответа: 11
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #11 Добавлено: 05.06.06 17:56
а чо так всё трудно? :) я думал полегче будет....:(( в бэйсике всё должно быть просто :)
Вот это я считаю просто:
ListView1.Items(0).Text = "тест"
Но вечно в 0 добавляеться :( попробую разобраться с твоими примерами

Ответить

Номер ответа: 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..
Надеюсь понятно объяснил??? Если же нет... увы, на большее я не способен.. и помочь больше мне нечем...

Ответить

Номер ответа: 13
Автор ответа:
 ZXC



Вопросов: 30
Ответов: 106
 Профиль | | #13 Добавлено: 08.06.06 20:30
спасибо....за такую огромную помощь...ещё раз спасибо.. теперь ВСЁ по ListView понятно :-))) напиши книгу по VB.NET, у тебя хорошо получается объяснять ;)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам