Seit einiger Zeit habe ich Schwierigkeiten mit einem meiner ListView's
wird sehr langsam aufgefüllt (3000 Einträge in 15 Sekunden oder so (mit 5 Spalten). Es machte mich wahnsinnig, da die Sql-Abfrage Werte in weniger als einer Sekunde zurückgab. Ich habe es aufgespürt ListViewColumnSorter
die die Verlangsamung verursacht. Wenn ich auskommentiert:
private ListViewColumnSorter lvwColumnSorterKontrahenci = new ListViewColumnSorter();
listViewKontrahenci.ListViewItemSorter = lvwColumnSorterKontrahenci;
ListView
wurde innerhalb von 1 Sekunde aufgefüllt. Ich dachte immer, dass, wenn ich anhängen Spaltensortierer es beginnt es seine Arbeit, wenn ich tatsächlich ausführen, indem Sie auf Spaltenkopf.
private void listViewKontrahenci_ColumnClick(object sender, ColumnClickEventArgs e) {
ListViewColumnSorter.columnClick(listViewKontrahenci, ref lvwColumnSorterKontrahenci, sender, e, headerIcons);
}
Ich dachte, dass es kein Problem sein würde, bis ich es wenigstens einmal so gestartet habe.
Code für meine Listenansicht Sortierung:
public static void columnClick(ListView varListView, ref ListViewColumnSorter lvwColumnSorter, object sender, ColumnClickEventArgs e, ImageList headerImages) {
//get list view header
IntPtr hHeader = SendMessage(varListView.Handle, LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero);
SendMessage(hHeader, HDM_SETIMAGELIST, IntPtr.Zero, headerImages.Handle);
SortOrder Order = SortOrder.Descending;
//format icons
HDITEM hd = new HDITEM {
mask = HDI_IMAGE | HDI_FORMAT
};
for (int i = 0; i < varListView.Columns.Count; i++) {
// if (i != e.Column) {
hd.fmt = HDF_LEFT | HDF_STRING;
hd.iImage = -1;
SendMessage(hHeader, HDM_SETITEM, new IntPtr(i), ref hd);
// }
}
hd.fmt = HDF_LEFT | HDF_STRING | HDF_BITMAP_ON_RIGHT;
//ListViewHelper.enableDoubleBuffer(varListView);
if (Order != SortOrder.None) {
hd.fmt |= HDF_IMAGE;
}
if (e.Column == lvwColumnSorter.SortColumn) {
if (lvwColumnSorter.Order == SortOrder.Ascending) {
hd.iImage = 0;
lvwColumnSorter.Order = SortOrder.Descending;
} else {
hd.iImage = 1;
lvwColumnSorter.Order = SortOrder.Ascending;
}
} else {
hd.iImage = 1;
lvwColumnSorter.SortColumn = e.Column;
lvwColumnSorter.Order = SortOrder.Ascending;
}
SendMessage(hHeader, HDM_SETITEM, new IntPtr(e.Column), ref hd);
varListView.Sort();
}
Was würden Sie mir also raten? Zu lösen / befestigen Sorter jedes Mal, wenn ich zu füllen ListView
oder gibt es einen besseren Weg?