Virtuelles ListView mit Spaltensortierung

10/01/2008 - 11:40 von Martin Enke | Report spam
Liebe NG,

Ich nutze in einem großen Projekt (VB6) u.a. die Common controls V6.0
SP6. In einem ListView (Report) müssen zwischen 0 und ca. 1000, manchmal
aber auch bis zu ca.20.000 Eintràge mit bis zu 8 SubItems verwaltet
werden (Sortierung nach den verschiedenen Columns) werden. Angezeigt
werden aber immer nur maximal ca. 20 Zeilen, abhàngig von der
Fenstergröße. Sollten tatsàchlich mal so viele Eintràge zugefügen werden
dauert das mit der herkömmlichen Add-Methode zu lange. Jetzt habe raus
gefunden, dass es die Möglichkeit eines "virtuellen" ListViews gibt, das
per Event die anzuzeigenden Zeilen aus einem beliebigen Array holen
kann, was natürlich unglaublich viel schneller geht und ich hab auch ein
Beispiel gefunden wo das mit den Common Controls 5 gemacht wurde,
allerdings ohne Sortierung und sehr viel Subclassing (was mir aber kein
Problem macht).

Hat sowas schon mal jemand programmiert?

Danke für Hilfe

Martin
 

Lesen sie die antworten

#1 Schmidt
14/01/2008 - 00:05 | Warnen spam
"Martin Enke" schrieb im Newsbeitrag
news:4785f635$0$27195$
Liebe NG,

Ich nutze in einem großen Projekt (VB6) u.a. die Common controls V6.0
SP6. In einem ListView (Report) müssen zwischen 0 und ca. 1000, manchmal
aber auch bis zu ca.20.000 Eintràge mit bis zu 8 SubItems verwaltet
werden (Sortierung nach den verschiedenen Columns) werden. Angezeigt
werden aber immer nur maximal ca. 20 Zeilen, abhàngig von der
Fenstergröße. Sollten tatsàchlich mal so viele Eintràge zugefügen werden
dauert das mit der herkömmlichen Add-Methode zu lange. Jetzt habe raus
gefunden, dass es die Möglichkeit eines "virtuellen" ListViews gibt, das
per Event die anzuzeigenden Zeilen aus einem beliebigen Array holen
kann, was natürlich unglaublich viel schneller geht und ich hab auch ein
Beispiel gefunden wo das mit den Common Controls 5 gemacht wurde,
allerdings ohne Sortierung und sehr viel Subclassing (was mir aber kein
Problem macht).



Warum nicht das VB6-Datagrid verwenden?
Das unterstützt einen quasi-virtuellen Modus, da es von einem
übergebenen (DataSource-)Recordset keine Kopien der
Felddaten zieht, sondern immer nur den gerade sichtbaren
Bereich der Recordset-Daten rendered.

Für Sortierungen dann einfach die Sort-Property des (ADO-)
Recordsets verwenden - die Reflektion im DataGrid sollte
dann entspr. automatisch passieren.

Olaf

Ähnliche fragen