[vb.net] ContextMenu/Kontextmenü und DataGridView

Gepostet am: Apr 28, 2011 5:52:9 AM

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. 

Kontextmenü GridView

Private SelectedItemGV As New IntegerPrivate Sub GV_CellMouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles gv_aktuell.CellMouseDown    If e.Button = MouseButtons.Right Then       Me.GV.Rows(e.RowIndex).Cells(e.ColumnIndex).ContextMenuStrip = Me.ContextMenuStrip_GV       SelectedItemGV = Me.GV.Item(0, e.RowIndex).Value    End IfEnd SubPrivate Sub DoSomethingToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DoSomethingToolStripMenuItem.Click

If Not IsNothing(SelectedItemGV) then     MsgBox("Übergabeparameter " & SelectedItemGV)  End IfEnd Sub

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.