welches Ereignis tritt im DataGridView auf beim sortieren?

25/07/2009 - 12:56 von Maximilian Tescher | Report spam
Hallo zusammen,

könntet Ihr mir sagen welches Ereignis im DataGridView auftritt wenn
ich zum sortieren auf einen Spaltenkopf klicke?

Dachte an SelectionChanged, aber dieses Ereignis wird schon aufgerufen
bevor das DataGridView die DataSource angezeigt hat. Das bringt dann
ein Fehler in meinem übrigen Source.

Denke ich lag mit SelectionChange falsch.


Viele Grüsse,
Maxi
 

Lesen sie die antworten

#1 Peter Götz
25/07/2009 - 13:33 | Warnen spam
Hallo Maximilian,

könntet Ihr mir sagen welches Ereignis im DataGridView
auftritt wenn ich zum sortieren auf einen Spaltenkopf klicke?

Dachte an SelectionChanged, aber dieses Ereignis wird
schon aufgerufen bevor das DataGridView die DataSource
angezeigt hat. Das bringt dann ein Fehler in meinem
übrigen Source.



Dann solltest Du Deinen Code mal kritisch überprüfen und
àndern.

Denke ich lag mit SelectionChange falsch.



Ja ziemlich.

Hier ein Beispiel, welches Dir die wichtigsten Ereignisse
beim Sortieren im DGV zeigt.

' /// Code in einem leeren Formmodul (Form1.vb)
Public Class Form1
Private WithEvents DGV As DataGridView
Private WithEvents mDT As DataTable
Private WithEvents 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
.DefaultCellStyle.Font = _
New Font("Arial", 12)

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

.Dock = DockStyle.Fill
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()
End With

mDV = New DataView(mDT)

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


Private Sub DGV_SelectionChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles DGV.SelectionChanged

Console.WriteLine("DGV_SelectionChanged")
End Sub


Private Sub DGV_Sorted _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles DGV.Sorted

Console.WriteLine("DGV_Sorted")
End Sub


Private Sub mDV_ListChanged _
(ByVal sender As Object, _
ByVal e As System.ComponentModel.ListChangedEventArgs _
) Handles mDV.ListChanged

Console.WriteLine _
("mDV_ListChanged; ListChangedType: " & _
e.ListChangedType.ToString)

End Sub


Private Sub mCM_CurrentChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mCM.CurrentChanged

Console.WriteLine("mCM_CurrentChanged")
End Sub


Private Sub mCM_ListChanged _
(ByVal sender As Object, _
ByVal e As System.ComponentModel.ListChangedEventArgs _
) Handles mCM.ListChanged

Console.WriteLine _
("mCM_ListChanged ListChangedType: " & _
e.ListChangedType.ToString)
End Sub


Private Sub mCM_PositionChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mCM.PositionChanged

Console.WriteLine("mCM_PositionChanged")
End Sub
End Class
' \\\ E N T E

Nach dem Programmstart die Sortierung durch Klick
auf einen der Spaltenköpfe àndern und im Ausgabe-
fenster die Ereignisse beobachten.

SelectionChanged und mCM_PositionChanged werden
beim Ändern der Sortierung nur deshalb ausgelöst, weil
sich auch die aktuelle Datensatzauswahl àndert, sprich
ein anderer Datensatz wird zum aktuellen Datensatz.

Im Beispiel siehst Du, dass das Sortieren auch Auswirkungen
auf die DataSource (mDV) hat und sowohl die DataView mDV
als auch der damit verbundene CurrencyManager mCM
entsprechende Ereignisse auslösen.

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

Ähnliche fragen