ListView-Steuerelement lädt sehr langsam
Was ist der Schnellste Weg diese zu füllen ListView-von-Abfrage, wenn es hat über 15000 Listen mit 9 Unterpunkten. es nimmt mich ungefähr 6 Minuten zu laden.
Hier ist, was ich schrieb, zu füllen ListView-Steuerelement.
Set rs = db.OpenRecordset(strSQL, dbOpenForwardOnly, dbReadOnly)
With Me.listViewData
.View = lvwReport
.GridLines = True
.FullRowSelect = True
.ListItems.Clear
.ColumnHeaders.Clear
End With
'Set up column headers
With Me.listViewData.ColumnHeaders
.Add , , "Client", 1440, lvwColumnLeft
.Add , , "Contact", 2160, lvwColumnLeft
.Add , , "Quote #", 720, lvwColumnCenter
.Add , , "Date", 1140, lvwColumnLeft
.Add , , "GrandTotal", 1440, lvwColumnRight
.Add , , "Weighted Value", 1440, lvwColumnRight
.Add , , "Chance %", 500, lvwColumnRight
.Add , , "Sales Cycle", 1140, lvwColumnRight
.Add , , "Won Orders", 1000, lvwColumnRight
.Add , , "SalesRep", 1000, lvwColumnRight
End With
While Not rs.EOF
Set lstItem = Me.listViewData.ListItems.Add()
lstItem.Text = Nz(rs!Name, "")
lstItem.SubItems(1) = Nz(rs!Company, "")
lstItem.SubItems(2) = Nz(rs!QuoteNumber, "")
lstItem.SubItems(3) = Nz(rs!OrderDate, "")
lstItem.SubItems(4) = Nz(Format(rs!GrandTotal, "Currency"), "0.00")
lstItem.SubItems(5) = Nz(Format(rs!GrandTotal * rs!Customfield1 / 100, "Currency"), "")
lstItem.SubItems(6) = Nz(rs!Customfield1, "")
lstItem.SubItems(7) = Nz(rs!Date1, "none")
lstItem.SubItems(8) = Nz(rs!Detail, "")
lstItem.SubItems(9) = Nz(rs!CustomT1, Nz(rs!UserID, ""))
For I = 1 To Me.listViewData.ColumnHeaders.Count - 1
Set sb = lstItem.ListSubItems(I)
If rs!Customfield1 = 100 Or Not IsNull(rs!List) Then
sb.ForeColor = vbBlue
lstItem.ForeColor = vbBlue
ElseIf rs!Cancelled = -1 Then
sb.ForeColor = vbRed
lstItem.ForeColor = vbRed
Else
sb.ForeColor = vbBlack
lstItem.ForeColor = vbBlack
End If
DoEvents
Next
rs.MoveNext
Wend
- Danke. Ich nahm DoEvents und es dann viel schneller. Ist es direkt binden der datasource im MSAccess 2003?
- +1 übersichtliche Darstellung ... sieht aus wie credit geht an eine Vielzahl von Respondern!
InformationsquelleAutor | 2009-03-03
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die erste Sache Sie tun sollten ist, loszuwerden, die "doevents" Das ist ein echter performance-killer.
Haben Sie zum laden der listview dynamisch? Warum nicht binden Sie es direkt an eine datasource?
Ich denken kann ein paar Dinge:
While...Wend ist ein langsamer looping-Mechanismus; Für...Weiter. For...Next ist schneller-selbst wenn Sie einen anderen Befehl ausführen, um die RecordCount. Dies ist, was ich verwenden:
With...End With verwenden Sie Ihre Unterpositionen:
Wickeln Sie die populater code:
Hoffe, das hilft!
Überprüfen Sie die Methoden des Listview-Steuerelements für so etwas wie beginupdate /endupdate oder set refresh auf false (wenn möglich). Dies bedeutet, dass die UI wird nicht versuchen, um den Bildschirm aktualisieren nach jedem Element Hinzugefügt wird, wodurch das hinzufügen viel schneller.
Dem Listview-Steuerelement wurde entwickelt, um einer großen Anzahl von Elementen, so sollte es möglich sein, mit ein bisschen Graben.