Benutzer mit den meisten Antworten
Windows Forms ListView-Control bei VirtualMode verschwinden die Checkboxen

Frage
-
Hallo Zusammen,
bei einer älteren WindowsForms-Anwendung von mir musste ich eine Optimierung bei einem ListView-Control (Details-Ansicht) einbauen. Und zwar verwende ich nun zum Laden der Datensätze die VirtualMode-Eigenschaft, damit ein schnelles Laden der Daten möglich ist. Leider sind bei diesem Verfahren auf einmal die Checkboxen nicht mehr sichtbar und auch nicht mehr im Bereich anklickbar. Jedoch scheint der Platz noch vorgesehen zu sein:
Wenn ich nun über eine Routine bei allen Datensätzen die Checked-Eigenschaft auf true setze, werden die Boxen zwar angezeigt, jedoch sind sie nicht mehr klickbar.
Ist das eventuell ein Bug ?
Für Lösungsansätze wäre ich sehr dankbar.
Viele Grüße Mahtias Reis
Antworten
-
Hier einen Artikel der MSDN Libary:
http://msdn.microsoft.com/de-de/library/system.windows.forms.listview.virtualmode.aspx
ListViewuses data-management operations that you provide; otherwise, false." id="mt2" style="text-decoration:underline;">"true, wenn ListView Datenverwaltungsvorgänge verwendet, die Sie bereitstellen; andernfalls false."Der virtuelle Modus kann in vielen Fällen nützlich sein. ListView object must be populated from a very large collection already in memory, creating a ListViewItem object for each entry can be wasteful." id="mt14">Wenn ein ListView-Objekt mit einer sehr großen Auflistung gefüllt werden muss, die sich bereits im Speicher befindet, kann das Erstellen eines ListViewItem-Objekts für jeden Eintrag sehr aufwändig sein. Im virtuellen Modus werden nur die erforderlichen Elemente erstellt. ListViewItem-Objekte eventuell häufig neu berechnet werden. Dies würde in Bezug auf die gesamte Auflistung zu inakzeptablen Leistungseinbußen führen. Im virtuellen Modus werden nur die erforderlichen Elemente neu berechnet."
Items collection is disabled." id="mt26">Im virtuellen Modus ist die Items-Auflistung deaktiviert. InvalidOperationException aus. CheckedItems-Auflistung und die SelectedItems-Auflistung. CheckedIndices collections instead." id="mt29">Wenn Sie die ausgewählten oder überprüften Elemente abrufen möchten, verwenden Sie stattdessen die SelectedIndices-Auflistung bzw. die CheckedIndices-Auflistung.
--------------------------------------
Rein aus meinem Verständnis (ich mag mich Irren), würde ich annehmen, dass eine Checkbox die den Wert false hat, nicht erforderlich ist. Da ein erstellen, eines Controls ziemlich viel Zeit beansprucht, besonders mit allen Handlern etc. denke ich wird das einfach übersprungen. Setzt du den Wert auf true, ist die anzeige notwendig. Da ja etwas vorhanden ist. Daher wenn du die Werte bearbeiten möchtest, kommst du wohl nicht drum herum, den VirtualModus auf false zu setzen.
Aber wie gesagt, dass ist nur meine annahme, ich lasse mich gerne eines besseren belehren :) Ich hoffe ich konnte dir trotzdem weiterhelfen.
Mit freundlichen Grüßen,
Niko Mix
- Bearbeitet Robert BreitenhoferModerator Mittwoch, 14. März 2012 09:43 Formatierung
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 16. März 2012 14:57
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 23. März 2012 09:48
-
Hallo Mathias,
ich denke das hatte ich schon verstanden. Vielleicht war meine Antwort nicht klar erkenntlich, der Virtual Mode ist nicht Asynchron, er ist lediglich eine Variante in der Verzichtet wird Elemente zu Zeichnen, die nicht benötigt werden. Eine nicht ausgewählte Checkbox IST nicht nötig anzuzeigen.
Hierdurch gewinnt er daher auch seine Geschwindigkeit, er muss nicht zig CheckBoxen laden, welche alle Handler registrieren müssen. Er verzichtet schlichtweg darauf, sie anzuzeigen. Ist die Checkbox jedoch ausgewählt, ist es nötig sie anzuzeigen.
Sogesehen, hättest du um dein Vorhaben umsetzen zu wollen, so oder so ein neues Control nehmen müssen oder den Code optimieren müssen. Der Virtual Mode wäre bei dir schlichtweg die falsche alternative gewesen.
Mit freundlichen Grüßen,
Niko Mix
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 23. März 2012 09:48
Alle Antworten
-
Hier einen Artikel der MSDN Libary:
http://msdn.microsoft.com/de-de/library/system.windows.forms.listview.virtualmode.aspx
ListViewuses data-management operations that you provide; otherwise, false." id="mt2" style="text-decoration:underline;">"true, wenn ListView Datenverwaltungsvorgänge verwendet, die Sie bereitstellen; andernfalls false."Der virtuelle Modus kann in vielen Fällen nützlich sein. ListView object must be populated from a very large collection already in memory, creating a ListViewItem object for each entry can be wasteful." id="mt14">Wenn ein ListView-Objekt mit einer sehr großen Auflistung gefüllt werden muss, die sich bereits im Speicher befindet, kann das Erstellen eines ListViewItem-Objekts für jeden Eintrag sehr aufwändig sein. Im virtuellen Modus werden nur die erforderlichen Elemente erstellt. ListViewItem-Objekte eventuell häufig neu berechnet werden. Dies würde in Bezug auf die gesamte Auflistung zu inakzeptablen Leistungseinbußen führen. Im virtuellen Modus werden nur die erforderlichen Elemente neu berechnet."
Items collection is disabled." id="mt26">Im virtuellen Modus ist die Items-Auflistung deaktiviert. InvalidOperationException aus. CheckedItems-Auflistung und die SelectedItems-Auflistung. CheckedIndices collections instead." id="mt29">Wenn Sie die ausgewählten oder überprüften Elemente abrufen möchten, verwenden Sie stattdessen die SelectedIndices-Auflistung bzw. die CheckedIndices-Auflistung.
--------------------------------------
Rein aus meinem Verständnis (ich mag mich Irren), würde ich annehmen, dass eine Checkbox die den Wert false hat, nicht erforderlich ist. Da ein erstellen, eines Controls ziemlich viel Zeit beansprucht, besonders mit allen Handlern etc. denke ich wird das einfach übersprungen. Setzt du den Wert auf true, ist die anzeige notwendig. Da ja etwas vorhanden ist. Daher wenn du die Werte bearbeiten möchtest, kommst du wohl nicht drum herum, den VirtualModus auf false zu setzen.
Aber wie gesagt, dass ist nur meine annahme, ich lasse mich gerne eines besseren belehren :) Ich hoffe ich konnte dir trotzdem weiterhelfen.
Mit freundlichen Grüßen,
Niko Mix
- Bearbeitet Robert BreitenhoferModerator Mittwoch, 14. März 2012 09:43 Formatierung
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 16. März 2012 14:57
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 23. März 2012 09:48
-
Hallo Mathias Reis,
Hat Dir die Antwort geholfen?
Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo Niko,
vielen Dank für Deine Antwort. Ich glaube Du hast meine eigentliche Frage falsch verstanden. Der Nutzer soll die Möglichkeit bekommen einzelne Datensätze per Checkbox auszuwählen, um danach die dahinter liegenden Dokumente zu drucken. Dies ist ohne Virtual Mode auch ohne weiteres möglich. Meine Hoffnung war hier, dass durch den Virtual Mode lediglich eine gewisse Anzahl an Datensätzen erzeugt wird, dann aber bitte auch richtig. Interessant ist, dass wenn ich die einzelnen Datensätze im Code einmal die Checket-Eigenschaft auf true und danach wieder auf false setze, die Checkboxen angezeigt werden. Das ist aber nicht wirklich eine schöne Lösung. Ich habe nun in den sauren Apfel gebissen und das ganze über WPF mit einer Drittanbieterkomponente beholfen, bei der ich leider tief in die Tasche greifen musste :-(, die bringt das ganze asynchrone Laden schon mit und ist superschnell. Wünschenswert wäre hier, dass so was auch mal von Microsoft kommt :-). Klar man kann das alles auch schön selbst implementieren, aber das kostet zu viel Zeit und Testaufwand.
Vielen Dank trotzdem für Deine Bemühungen.
Viele Grüße Mathias
p.s. Robert: um Deine Frage zu beantworten, die Antwort hat mir leider nicht wirklich weitergeholfen.
RSP Reis Software Produktion
Mathias Reis -
Hallo Mathias,
ich denke das hatte ich schon verstanden. Vielleicht war meine Antwort nicht klar erkenntlich, der Virtual Mode ist nicht Asynchron, er ist lediglich eine Variante in der Verzichtet wird Elemente zu Zeichnen, die nicht benötigt werden. Eine nicht ausgewählte Checkbox IST nicht nötig anzuzeigen.
Hierdurch gewinnt er daher auch seine Geschwindigkeit, er muss nicht zig CheckBoxen laden, welche alle Handler registrieren müssen. Er verzichtet schlichtweg darauf, sie anzuzeigen. Ist die Checkbox jedoch ausgewählt, ist es nötig sie anzuzeigen.
Sogesehen, hättest du um dein Vorhaben umsetzen zu wollen, so oder so ein neues Control nehmen müssen oder den Code optimieren müssen. Der Virtual Mode wäre bei dir schlichtweg die falsche alternative gewesen.
Mit freundlichen Grüßen,
Niko Mix
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 23. März 2012 09:48
-
Hallo Mathias Reis,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.