Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Виртуальный режим ListView Добавлено: 04.06.07 11:26  

Автор вопроса:  fluke | ICQ: 318170731 
Есть Листвью в виртуальном режиме, на событие RetrieveVirtualItem происходит заполнение Item-ом, но даже если фокус стоит на ListView, событие RetrieveVirtualItem продолжает, даже если все записи заполнены! у кого есть соображения?

Public Class Form1
    Private Sub ListView1_RetrieveVirtualItem(ByVal sender As Object, ByVal e As System.Windows.Forms.RetrieveVirtualItemEventArgs) Handles ListView1.RetrieveVirtualItem
        Static Dim n As Integer
        n = n + 1
        TextBox1.Text = n.ToString
        e.Item = New ListViewItem(e.ItemIndex.ToString)
        e.Item.SubItems.Add(e.ItemIndex.ToString)
        e.Item.SubItems.Add(e.ItemIndex.ToString)
        e.Item.SubItems.Add(e.ItemIndex.ToString)
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ListView1.VirtualListSize = 100
    End Sub
End Class

Ответить

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

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



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #1 Добавлено: 04.06.07 11:39
проблема в том, что идет постояный вызов обновления элементов, что с моей точки зрения не есть правильно, или я ошибаюсь?

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 04.06.07 13:40
Да вроде всё логично. Если у тебя миллион записей, то не хранить же
весь миллион в памяти. По мере надобности подгружает, как стало
ненужным - выгружает.

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 04.06.07 13:42
Могу посоветовать сделать что-то типа кеша - при загрузке записей
сохранять их в кеш, затем если что-то понадобилось, то сначала искать
в кеше, и только если там данных не оказалось, грузить из источника
данных. Пи этом было бы разумно контролировать объем кеша, чтобы он
сильно не разрастался - периодически убивать старые элементы.

Ответить

Номер ответа: 4
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #4 Добавлено: 04.06.07 19:15
проблема не в кеше. меня интересует один но. когда меняю размер списка VirtualListSize происходит заполнение видимых итемов, но по идеи он после заполнения должен прекратиться, но как не странно событие RetrieveVirtualItem не прекращается. фокус стоит на одном итеме, а лист продолжает делать рефреш. тобишь n = n + 1. и так пока листвью не потеряет фокус

Ответить

Номер ответа: 5
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #5
Добавлено: 04.06.07 19:23
там есть дргое событие, кажется..., может ItemSelectionChanged...

Ответить

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



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #6 Добавлено: 05.06.07 12:49
ItemSelectionChanged - происходит когда юзер кликает на итемы или выделяет их. RetrieveVirtualItem - когда рефреш окна, ну там скрол и т.д.

Ответить

Номер ответа: 7
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #7
Добавлено: 05.06.07 22:49
RetrieveVirtualItem - когда рефреш окна, ну там скрол и т.д.
как ты его используешь?

Ответить

Номер ответа: 8
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #8 Добавлено: 06.06.07 10:30
    Private Sub ListView1_RetrieveVirtualItem(ByVal sender As Object, ByVal e As System.Windows.Forms.RetrieveVirtualItemEventArgs) Handles ListView1.RetrieveVirtualItem
        Static Dim n As Integer
        n = n + 1
        TextBox1.Text = n.ToString
        e.Item = New ListViewItem(e.ItemIndex.ToString)
        e.Item.SubItems.Add(e.ItemIndex.ToString)
        e.Item.SubItems.Add(e.ItemIndex.ToString)
        e.Item.SubItems.Add(e.ItemIndex.ToString)
    End Sub

Ответить

Номер ответа: 9
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #9
Добавлено: 06.06.07 21:03
http://msdn2.microsoft.com/en-us/library/system.windows.forms.listview.retrievevirtualitem.aspx

Occurs when the ListView is in virtual mode and requires a ListViewItem.
да, он так и должен выполняться, в зависимости от значения VirtualModeSize появляются итемы, которые нужно задать в каждом столбце



проблема в том, что идет постояный вызов обновления элементов, что с моей точки зрения не есть правильно, или я ошибаюсь?
это не постоянный вызов элементов, а судя по всему постоянный их поиск что ли..., не пойму

вобщем здесь http://translate.google.com/translate?hl=ru&sl=en&u=http://blogs.msdn.com/cumgranosalis/archive/2006/03/06/VirtualListViewUsage.aspx&sa=X&oi=translate&resnum=3&ct=result&prev=/search%3Fq%3DRetrieveVirtualItem%26hl%3Dru%26client%3Dopera%26rls%3Dru%26hs%3Dmby хорошо написано,

хорошая вешь ))

Ответить

Страница: 1 |

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



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