Frage zum Click-Ereignis in einem DataGridView-Steuerelemt

24/06/2008 - 09:40 von Christoph Michalski | Report spam
Hallo,
beim Klick auf einen Eintrag in einem DataGridView soll eine bestimmte
Prozedur ausgeführt werden. Dies soll aber nicht(!) passieren, wenn der User
auf einen ColumnHeader einer Spalte klickt. Ganz blöde Geschichte, aber ich
kriege es einfach nicht raus, wie ich in einem Click-Ereignis feststellen
kann, ob der User auf eine normale Zeile oder auf einen Header geklickt hat!
Kann mir vielleicht jemand einen Tipp geben?
Grüße
Christoph
 

Lesen sie die antworten

#1 Peter Götz
24/06/2008 - 10:33 | Warnen spam
Hallo Christoph,

beim Klick auf einen Eintrag in einem DataGridView
soll eine bestimmte Prozedur ausgeführt werden.
Dies soll aber nicht(!) passieren, wenn der User
auf einen ColumnHeader einer Spalte klickt.



Und was soll geschehen, wenn der Benutzer weder auf
eine Kopfzelle noch auf eine Datenzelle klickt?

Ganz blöde Geschichte, aber ich kriege es einfach
nicht raus, wie ich in einem Click-Ereignis feststellen
kann, ob der User auf eine normale Zeile oder auf
einen Header geklickt hat!



Nicht im Klick-Ereignis, sondern im CellClick-Ereignis
oder im Mouse_Down- / Mouse_Up- Ereignis mit Hilfe
von DataGridView.HitTest.

Kann mir vielleicht jemand einen Tipp geben?



Hier ein Beispiel, das beide Möglichkeiten nutzt:

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

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", 14)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 9, FontStyle.Bold)
End With

Me.Controls.Add(DGV)

CreateData()

DGV.DataSource = mDV
DGV.AutoResizeColumns()
DGV.AutoResizeRows()

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("Text", GetType(String))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i)
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)
End Sub

Private Sub DGV_CellClick _
(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs _
) Handles DGV.CellClick

Console.WriteLine _
("_CellClick Col: " & _
e.ColumnIndex.ToString & _
"; Row: " & e.RowIndex.ToString)
End Sub


Private Sub DGV_MouseDown _
(ByVal sender As Object, _
ByVal e As MouseEventArgs _
) Handles DGV.MouseDown

Dim HTI As DataGridView.HitTestInfo = _
DGV.HitTest(e.X, e.Y)

Dim strBuffer As String = ""
With HTI
strBuffer &= HTI.Type.ToString
strBuffer &= ": Col; " & HTI.ColumnIndex.ToString
strBuffer &= "; Row: " & HTI.RowIndex
End With

Console.WriteLine _
("_MouseDown " & strBuffer)
End Sub
End Class
' \\\ E N T E

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

Ähnliche fragen