DataGridView Event gesucht

19/03/2009 - 11:04 von Peter Haus | Report spam
Hallo NG

Wenn ich im DataGridView in einer Zelle etwas àndere,
wird im RowHeader ein Stift angezeigt.
Ich suche das Event dazu (Falls es das gibt).
Da ich kein dazugehöriges Event finden kann, hier
die Frage.
Gibt es ein Event das in dem Moment ausgelöst
wird, wenn der Stift im RowHeader angezeigt wird?

Ich möchte damit einen Button auf Enabled setzen.
Das CellEndEdit Event wird auch ausgelösst wenn in der Zelle
nichts geàndert wurde.
Oder CellValueChanged erst wenn die Zelle verlassen wird.

Gruss Peter
 

Lesen sie die antworten

#1 Peter Götz
19/03/2009 - 13:30 | Warnen spam
Hallo Peter,

Wenn ich im DataGridView in einer Zelle etwas àndere,
wird im RowHeader ein Stift angezeigt.
Ich suche das Event dazu (Falls es das gibt).



Es gibt eine ganze Reihe von Events, die den Beginn
und / oder das Ende des EditModus für eine Zelle
signalisieren.

Das nachfolgende Beispiel zeigt einige davon.

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

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

CreateData()

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

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

.Dock = DockStyle.Fill
.DataSource = mDV
End With
Me.Controls.Add(DGV)
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()
End With

mDV = New DataView(mDT)

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

End Sub

Private Sub DGV_EditingControlShowing _
(ByVal sender As Object, _
ByVal e As DataGridViewEditingControlShowingEventArgs _
) Handles DGV.EditingControlShowing

' wird ausgelöst, wenn eine Zelle in den
' Editmodus versetzt wird.

' Verweis auf die im Grid gehostete Textbox holen.
TB = DirectCast(e.Control, TextBox)
End Sub

Private Sub DGV_CellBeginEdit _
(ByVal sender As Object, _
ByVal e As DataGridViewCellCancelEventArgs _
) Handles DGV.CellBeginEdit
' wird ausgelöst, wenn eine Zelle in den
' Editmodus versetzt wird.
Console.WriteLine("DGV_CellBeginnEdit")
End Sub

Private Sub TB_VisibleChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles TB.VisibleChanged
' Wird ausgelöst, wenn der EditModus für
' eine Zelle begonnen oder beendet wird.
Console.WriteLine("TB_VisibleChanged")
End Sub

Private Sub TB_TextChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles TB.TextChanged
' Wird ausgelöst, wenn der Inhalt
' der Zelle veràndert wird
Console.WriteLine("TB_TextChanged " & TB.Text)
End Sub
End Class
' \\\ E N T E

Nach dem Programmstart einfach die Inhalte irgendwelcher
Zellen àndern und dabei das Ausgabefenster (Console)
beobachten.

Die Ereignisse

DGV_CellBeginnEdit
DGV_EditingControlShowing
TB_VisibleChanged

werden ausgelöst, wenn der Editmodus für eine Zelle
eingeleitet worden ist., also z.B. nachdem einmal auf die
Zelle geklickt wurde um den Focus darauf zu setzen
und dann ein zweites Mal um den Editmodus für
diese Zelle einzuschalten.

Das Ereignis

TB_TextChanged

wird ausgelöst, wenn der Inhalt einer im EditModus befindlichen
Zelle geàndert wird. Mit dem ersten Auftreten dieses Ereignisses
wird auch das Stiftsymbol im RowHeader angezeigt.

Das Ereignis

TB_VisibleChanged

wird erneut ausgelöst, wenn der Editmodus der Zelle
beendet wird.

Da ich kein dazugehöriges Event finden kann, hier
die Frage.
Gibt es ein Event das in dem Moment ausgelöst
wird, wenn der Stift im RowHeader angezeigt wird?

Ich möchte damit einen Button auf Enabled setzen.



Was genau möchtest Du mit diesem Button bewirken?

Das CellEndEdit Event wird auch ausgelösst wenn
in der Zelle nichts geàndert wurde.



Aber nur, wenn zuvor der EditModus für diese Zelle
eingeschaltet war.

Oder CellValueChanged erst wenn die Zelle verlassen
wird.



Das Ereignis, welches sofort eintritt, wenn der Benutzer
in der Zelle eine Eingabe macht, ist TB_TextChanged
im obigen Beispiel.
Evtl. könnten Dich in diesem Zusammenhang auch noch
die Ereignisse TB_KeyDown, TB_KeyUp und TB_KeyPressed
interessieren.

Ich denke, bei dieser Auswahl sollte auch das passende
Ereignis für Dein Vorhaben dabei sein.

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

Ähnliche fragen