[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.