2011-01-11 24 views
2

In meinem DataGridView-Objekt wurde der Auswahlmodus auf FullRowSelect gesetzt. Wenn ich in meinem DataGridView mehrere Zeilen auswähle und mit der linken Maustaste auf eine Zelle klicke, werden alle anderen Zeilen abgewählt und nur die Zeile ausgewählt, auf die ich geklickt habe. Dies geschieht nicht mit der rechten Maustaste.DataGridView Mehrere Zeilen bei Linksklick beibehalten

Wie kann ich mein DataGridView so einstellen, dass ich mehrere Zeilen auswählen kann, mit der linken Maustaste auf eine Zelle klicke und alle Zeilen unverändert bleiben?

Antwort

2

Das könnte schwierig sein, weil es dem Standard-UI-Verhalten von Windows widerspricht. Möglicherweise muss Ihre Benutzeroberfläche verfolgen, welche Zeilen im DGV ausgewählt sind, und die vorherige Auswahl wiederherstellen, nachdem sie durch einen Linksklick geändert wurde. Das bringt jedoch weitere Probleme mit sich. Nämlich:

  • Wie/wann setzen Sie die Auswahl zurück?
  • Wenn ein Linksklick die Auswahl nicht ändern darf, wie wählen Sie Zeilen an erster Stelle?
  • Et cetera.

Je mehr-umfassende Alternative würde alle auf dem DGV MouseDown/Click Ereignisse zu stoppen und Ihre eigene Auswahlverhalten implementieren, obwohl ich nicht sicher bin, in welchem ​​Umfang der mit WinForms überhaupt möglich ist.

Meine bescheidene Meinung wäre, dieses UI-Design zu überdenken. Wird es den Erwartungen der Nutzer entsprechen? :)

Update: Eine Alternative-Alternative, die mir gerade aufgefallen ist: Wenn dieses Verhalten aus irgendeinem Grund absolut notwendig ist, wäre Ihre beste Wette, ein benutzerdefiniertes Steuerelement zu erstellen, das eine Art "Auswahl gesperrt "Status für die DataGridView. Der Benutzer könnte dann diese Überschreibung explizit auf das Standardverhalten von Windows anwenden (indem er beispielsweise Zeilen auswählt und dann auf eine Schaltfläche "Sperren" klickt). So etwas zu konstruieren wäre jedoch nicht trivial.

+0

ja, das vorgeschlagene Verhalten wäre schlecht UI-Design. – Jonathan

+1

Dies ist eigentlich ein sehr intuitives Design, wenn es richtig gemacht wird. Genau so funktioniert die Nachrichtenauswahl in Outlook, mit einer Klarstellung: Klicken Sie mit der linken Maustaste auf _innerhalb_ der Auswahl ändert sich die Auswahl nicht. Klicken Sie jedoch mit der linken Maustaste auf _außerhalb_ der Auswahl, löscht die Auswahl und wählt die angeklickte Zeile aus. Dies ist wichtig für das Ziehen und Ablegen mehrerer Zeilen. Ich suche auch eine Lösung, um dieses Verhalten mit dem DataGridView zu erreichen. – David

Verwandte Themen