Seletieren eine Datagrid-Row zeile mit der rechten Maustaste

30/07/2009 - 11:47 von Roland Grothe | Report spam
Hallo Freunde,

Ich möchte gerne eine Datagrid-Row auswàhlen. Mit

Private Sub DGV1_CellMouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles
DGV1.CellMouseDown
Me.DGV1.Rows(e.RowIndex).Selected = True
If e.Button = Windows.Forms.MouseButtons.Right Then
MenuConText1.Show(MousePosition)
End If
End Sub

Dieser Code wàhlt zwar die Spalte aus, setzt aber nicht den
Datensatz-Markierer. Im Endeffekt geht es nur darum , den mit der rechte
Maustaste ausgewàhlten Datensatz zu löschen.

Danke für Eure Antworten

Roland


Thanx, Roland
 

Lesen sie die antworten

#1 Peter Götz
31/07/2009 - 14:00 | Warnen spam
Hallo Roland,

Ich möchte gerne eine Datagrid-Row auswàhlen.
Mit

Private Sub DGV1_CellMouseDown(ByVal sender As Object,
ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs
) Handles
DGV1.CellMouseDown
Me.DGV1.Rows(e.RowIndex).Selected = True
If e.Button = Windows.Forms.MouseButtons.Right Then
MenuConText1.Show(MousePosition)
End If
End Sub

Dieser Code wàhlt zwar die Spalte aus, setzt aber nicht
den Datensatz-Markierer. Im Endeffekt geht es nur darum ,
den mit der rechteMaustaste ausgewàhlten Datensatz zu
löschen.



Der normale, jedem Windows-Benutzer gelàufige Vorgang
beim Löschen eines Datensatzes aus einem Grid ist, dass
er den Datensatz durch einen (linken) Mausklick auf den
Datensatzmarkierer auswàhlt und dann die "Entf"-Taste
drückt.

Warum willst Du Deine potentiellen Anwender mit einer
vom Standard abweichenden Bedienungsweise verwirren?

Der nachfolgende Code macht bei einem rechten Mausklick
in eine DGV-Zelle die betr. Zeile zur aktuellen Zeile und
ermöglicht dann durch Drücken der "Entf"-Taste das Löschen
des akt. Datensatzes.

' /// Code in einer leeren Form1.vb
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private mDV As DataView
Private WithEvents mCM As CurrencyManager

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

DGV = New DataGridView
With DGV
.Dock = DockStyle.Fill
.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

End With
Me.Controls.Add(DGV)
CreateData()

DGV.DataSource = mDV
DGV.AutoResizeColumns()

End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("SText", GetType(String))
.Columns.Add("LText", GetType(String))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, True)
DR.Item(2) = MonthName(i, False)
.Rows.Add(DR)
Next
.AcceptChanges()

mDV = New DataView(mDT)

mCM = _
DirectCast _
(Me.BindingContext(mDV), _
CurrencyManager)

End With
End Sub

Private Sub DGV_CellMouseUp _
(ByVal sender As Object, _
ByVal e As DataGridViewCellMouseEventArgs _
) Handles DGV.CellMouseUp

If e.Button = Windows.Forms.MouseButtons.Right Then
mCM.Position = e.RowIndex
DGV.CurrentRow.Selected = True
End If
End Sub

End Class
' \\\ E N T E


Dabei solltest Du aber nicht vergessen, dass der Benutzer
nicht unbedingt mit der Maus zu einer anderen Zelle oder
Zeile navigieren kann, sondern auch via Tastatur mit Hilfe
der Cursor-Tasten (auf, ab, links, rechts). Wie willst Du dann
in diesem Fall auf einen Zellen- oder Zeilenwechsel reagieren?

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen