In einem DataGridView benötigt man nicht selten ein Kontextmenü, um beispielsweise Datensätze zu öffnen, zu bearbeiten usw. Ich muss zu meiner Schande gestehen, dass ich jetzt fast 10 Minuten gebraucht habe, um ein simples KontextMenü zu erstellen. Ich gehe mal davon aus, dass man beispielsweise die ID des Datensatzes an die Funktionen des KontextMenüs weiterreichen möchte. 

Erläuterung des Codes:

  • Der GV_CellMouseDown-Ereignishandler wird ausgelöst, wenn ein Benutzer auf eine Zelle in der DataGridView (GV) klickt. Er überprüft, ob der Klick mit der rechten Maustaste erfolgte.
  • Wenn mit der rechten Maustaste geklickt wird, wird das Kontextmenü (ContextMenuStrip_GV) der angeklickten Zelle zugewiesen, und der Wert der ersten Zelle in der angeklickten Zeile wird in SelectedItemGV gespeichert.
  • Der DoSomethingToolStripMenuItem_Click-Ereignishandler reagiert auf die Auswahl des Kontextmenüpunkts. Er überprüft, ob SelectedItemGV einen Wert enthält und zeigt dann eine Nachrichtenbox mit dem Wert von SelectedItemGV an.

Mit Me.GV.Item(0,e.RowIndex).Value wird der Wert der 1.Spalte der Zeile, über der der Rechtsklick ausgeführt wurde ermittelt. Man könnte stattdessen natürlich eine beliebige andere Spalte auslesen, bzw. den Wert der aktuellen Zelle, über der der Rechtsklick ausgeführt wird. In diesem Fall müsste es dann Me.GV.Item(e.ColumnIndex,e.RowIndex).Value lauten.Der Inhalt der Zelle wird in einer Private Variable, die innerhalb des Moduls … zur Verfügung steht gespeichert. Auf diese wird dann von der Funktion des Kontextmenüs zugegriffen und diese weiterverarbeitet. Auch bei mehreren GridViews auf einem Formular benötigt man an und für sich nur eine dieser Private Variablen, da ja nicht mehr als ein GridView gleichzeitig ein KontextMenü anzeigen kann.