Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: ListView виртуальный режим и Access Добавлено: 12.04.09 15:02  

Автор вопроса:  rw12lq
Есть ListView в виртуальном режиме. Помогите примером, как заполнить ListView данными из базы данных.

В Sub ListView1_RetrieveVirtualItem идет постояный вызов обновления элементов. И если подключаться к базе из этой процедуры, то естественно все тормозит..

Подскажите, как правильно реализовать... Здесь есть человек по имени fluke, тоже терроризирует listview и virtual mode.. Если ты здесь появишься, напиши, пожайлуста как с тобой связаться...

Заранее всех благодарю..

Ответить

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

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



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #1 Добавлено: 14.04.09 10:25
OnRetrieveVirtualItem это просто отрисовка элементов, которые видны. она естественно срабатывает даже при малейшем движении. Есть OnCacheVirtualItems, из названия я думаю понятно, что срабатывает только один раз перед изменением отображаемых данных. Кэшируешь в этой процедуре список но не весь, а только диапазон элементов, который OnCacheVirtualItems запрашивает. а в OnRetrieveVirtualItem обращаешься к уже готовым элементам (тобишь экземпляры Item и SubItem). Еще один момент. OnCacheVirtualItems тоже не панацея, если записей много и плавно прокручивать список, то постоянно будут запрашиваться новые элементов.

вот пример с MSDN, он не оптимальный, но понять как это работает можно. Если интересует быстродействие, обращайся в аську. Я в профиле сейчас запишу

  1.  
  2. Public Class Form1
  3.     Inherits Form
  4.     Private myCache() As ListViewItem 'array to cache items for the virtual list
  5.     Private firstItem As Integer 'stores the index of the first item in the cache
  6.     Private WithEvents listView1 As ListView
  7.  
  8.     Public Shared Sub Main()
  9.         Application.Run(New Form1)
  10.     End Sub
  11.  
  12.     Public Sub New()
  13.         'Create a simple ListView.
  14.         listView1 = New ListView()
  15.         listView1.View = View.SmallIcon
  16.         listView1.VirtualMode = True
  17.         listView1.VirtualListSize = 10000
  18.  
  19.         'Add ListView to the form.
  20.         Me.Controls.Add(listView1)
  21.  
  22.         'Search for a particular virtual item.
  23.         'Notice that we never manually populate the collection!
  24.         'If you leave out the SearchForVirtualItem handler, this will return null.
  25.         Dim lvi As ListViewItem = listView1.FindItemWithText("111111")
  26.  
  27.         'Select the item found and scroll it into view.
  28.         If Not (lvi Is Nothing) Then
  29.             listView1.SelectedIndices.Add(lvi.Index)
  30.             listView1.EnsureVisible(lvi.Index)
  31.         End If
  32.  
  33.     End Sub
  34.  
  35.     'The basic VirtualMode function.  Dynamically returns a ListViewItem
  36.     'with the required properties; in this case, the square of the index.
  37.     Private Sub listView1_RetrieveVirtualItem(ByVal sender As Object, ByVal e As RetrieveVirtualItemEventArgs) Handles listView1.RetrieveVirtualItem
  38.         'Caching is not required but improves performance on large sets.
  39.         'To leave out caching, don't connect the CacheVirtualItems event
  40.         'and make sure myCache is null.
  41.         'check to see if the requested item is currently in the cache
  42.         If Not (myCache Is Nothing) AndAlso e.ItemIndex >= firstItem AndAlso e.ItemIndex < firstItem + myCache.Length Then
  43.             'A cache hit, so get the ListViewItem from the cache instead of making a new one.
  44.             e.Item = myCache((e.ItemIndex - firstItem))
  45.         Else
  46.             'A cache miss, so create a new ListViewItem and pass it back.
  47.             Dim x As Integer = e.ItemIndex * e.ItemIndex
  48.             e.Item = New ListViewItem(x.ToString())
  49.         End If
  50.  
  51.  
  52.     End Sub
  53.  
  54.     'Manages the cache.  ListView calls this when it might need a
  55.     'cache refresh.
  56.     Private Sub listView1_CacheVirtualItems(ByVal sender As Object, ByVal e As CacheVirtualItemsEventArgs) Handles listView1.CacheVirtualItems
  57.         'We've gotten a request to refresh the cache.
  58.         'First check if it's really neccesary.
  59.         If Not (myCache Is Nothing) AndAlso e.StartIndex >= firstItem AndAlso e.EndIndex <= firstItem + myCache.Length Then
  60.             'If the newly requested cache is a subset of the old cache,
  61.             'no need to rebuild everything, so do nothing.
  62.             Return
  63.         End If
  64.  
  65.         'Now we need to rebuild the cache.
  66.         firstItem = e.StartIndex
  67.         Dim length As Integer = e.EndIndex - e.StartIndex + 1 'indexes are inclusive
  68.         myCache = New ListViewItem(length) {}
  69.  
  70.         'Fill the cache with the appropriate ListViewItems.
  71.         Dim x As Integer = 0
  72.         Dim i As Integer
  73.         For i = 0 To length
  74.             x = (i + firstItem) * (i + firstItem)
  75.             myCache(i) = New ListViewItem(x.ToString())
  76.         Next i
  77.  
  78.     End Sub
  79.  
  80.     'This event handler enables search functionality, and is called
  81.     'for every search request when in Virtual mode.
  82.     Private Sub listView1_SearchForVirtualItem(ByVal sender As Object, ByVal e As SearchForVirtualItemEventArgs) Handles listView1.SearchForVirtualItem
  83.         'We've gotten a search request.
  84.         'In this example, finding the item is easy since it's
  85.         'just the square of its index.  We'll take the square root
  86.         'and round.
  87.         Dim x As Double = 0
  88.         If [Double].TryParse(e.Text, x) Then 'check if this is a valid search
  89.             x = Math.Sqrt(x)
  90.             x = Math.Round(x)
  91.             e.Index = Fix(x)
  92.         End If
  93.         'Note that this only handles simple searches over the entire
  94.         'list, ignoring any other settings.  Handling Direction, StartIndex,
  95.         'and the other properties of SearchForVirtualItemEventArgs is up
  96.         'to this handler.
  97.     End Sub
  98.  
  99. End Class

Ответить

Номер ответа: 2
Автор ответа:
 rw12lq



Вопросов: 2
Ответов: 80
 Профиль | | #2 Добавлено: 14.04.09 18:18
Спасибо большое fluke. Попробую.

Ответить

Страница: 1 |

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



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