Ich beantworte meine eigene Frage, weil ich glaube nicht, dass dies auf Formularlast möglich ist. Meine Anwendung enthält ein Formular, mit dem Sie einem Projekt Auswahlen hinzufügen können. Wenn der Benutzer das Projekt "bearbeiten" möchte, muss ich dieses Formular aufrufen und alle vorherigen Auswahlen treffen, damit der Benutzer hinzufügen/löschen kann. Wenn Sie ein DataGridView (DGV) mit aktivierter Mehrfachauswahl verwenden, können Sie zur Laufzeit "ctl-klicken" und mehrere Elemente auswählen ... im Wesentlichen versuche ich, dieses Verhalten im Code beim Laden des Formulars in 'Bearbeiten' wiederherzustellen Modus. Nachdem das Formular initialisiert ich eine Methode, die die DGV aus OleDb Tabellen lädt, dies zu testen, habe ich versucht, die folgenden Zeilen nach dem Last-Methodenaufruf und als die letzten Zeilen des Methodenaufrufes setzen:
dgv1.Rows[0].Selected = true;
dgv1.Rows[1].Selected = true;
dgv1.Rows[2].Selected = true;
Offensichtlich erwartete ich bei der Formularauslastung, dass die ersten drei Zeilen "ausgewählt" wurden, aber das passierte nicht. Allerdings erinnerte ich mich an ein separates Problem, ich konnte nie die DGV laden, ohne die erste Zeile standardmäßig ausgewählt zu haben ... also habe ich einen 'Refresh' Button eingefügt, der einfach die 'Load' Methode wieder aufruft ... die Die letzte Zeile lautet: DGV1.Rows[0].Selected = False;
Mit der Schaltfläche "Aktualisieren" wird der DGV geladen, ohne dass die erste Zeile ausgewählt ist. Ich war neugierig, ob das eine ähnliche Situation war, also, als ich diese 3 Zeilen am Ende der Lade-Methode hinzugefügt habe, passierte nichts beim Laden der Formulare ... aber ... wenn ich den 'Aktualisieren' Knopf drücke, die ersten 3 Zeilen wurden 'ausgewählt'.
Ich habe seit über 3 Tage Erforschung dieser und den folgenden von der Datagridview-Projektmanager (2006) gefunden: https://social.msdn.microsoft.com/Forums/windows/en-US/cf351d44-4a9a-4c80-8d52-4fb349847908/multiple-select-is-not-working-for-datagridview?forum=winformsdatacontrols
Leider gibt es keine einfache Lösung für dieses Problem, da ich nicht tat Schau dir dieses Szenario an und entwerfe das Gitter, um das gut zu handhaben. Das Hauptproblem rührt von der Tatsache her, dass wenn Sie mit der Maus auf das Raster klicken, das Raster die aktuelle Zelleneigenschaft setzt, die die Auswahl löscht, bevor die nächste Zelle/Zeile/Spalte ausgewählt wird. Während Ihre Codezeile die Zeile auswählt, wird die von Ihnen ausgewählte Zeile gelöscht, wenn Sie die nächste Zeile auswählen oder einfach mit der Tastatur zur nächsten Zeile wechseln. Der einfachste Weg, um Ihr Szenario zu tun, ist benutzerdefinierte Malerei über die RowPrePaint und malen Sie die "ausgewählten" Zeilen mit der gleichen SelectedBackground Farbe. Sie können den Wert der Kontrollkästchenzelle in der Zeile, die Sie gerade malen, einfach abfragen, um zu wissen, ob diese Zeile "ausgewählt" ist, aber die Selected-Eigenschaft muss nicht auf true festgelegt werden. Die Kehrseite ist, dass Sie alle Zeilen verfolgen oder aufzählen müssen, um alle "ausgewählten" Zeilen zu einem bestimmten Zeitpunkt zu kennen. -> kennzeichnen -> Datagridview-Programm-Manager - 2006
Also mein Plan geht nach vorn ist die DGV wieder aufbauen Kontrollkästchen verwenden, wie empfohlen. Ich wollte das nur zur allgemeinen Information veröffentlichen und/oder wenn jemand eine bessere Idee hat. Danke
Sollte nicht Ihre Selection-Variable die dtRow-Variable verwenden? Sie verwenden die dtRow-Variable nicht in Ihren Schleifen. – LarsTech
Sorry, das war ein Tippfehler ... Ich habe den Code aktualisiert. – ArtR45