DataGridView und DataSet (DataTable) Event

11/12/2007 - 13:36 von Michael Burkhardt | Report spam
Hallo ich habe eine Frage:
Ich habe ein DataGridView mit einem DataSet (DataTable)
verbunden. Wenn ich in meinem DataGridView eine neue
Zeile eingebe habe ich das Ergebnis in meinem
DataSet (DataTable).
Meine Frage nun: Ich suche ein Event welches mir die Möglichkeit gibt
dann gefeuert zu werden wenn die Daten schon im DataSet(DataTable) sind.
Ich habe es mit >>> CellEndEdit <<< versucht. Doch leider wird die Date
(Row)
erst dann in die DataTable verschoben wenn das Ereignis abgearbeitet wurde.

Gibt es eine andere Möglichkeit?
Danke im Voraus!
Gruß Michael
 

Lesen sie die antworten

#1 Peter Götz
11/12/2007 - 20:57 | Warnen spam
Hallo Michael,

Ich habe ein DataGridView mit einem DataSet (DataTable)
verbunden. Wenn ich in meinem DataGridView eine neue
Zeile eingebe habe ich das Ergebnis in meinem
DataSet (DataTable).
Meine Frage nun: Ich suche ein Event welches mir die
Möglichkeit gibt dann gefeuert zu werden wenn die
Daten schon im DataSet(DataTable) sind.



Dann musst Du die Eregnisse

DataTable_CellChanging

und/oder

DataTable_CellChanged

auswerten.

Ich habe es mit >>> CellEndEdit <<< versucht.



CellEndEdit ist ein Ereignis des DataGridView, dessen
Ereignisse nicht über die DataTable aussagen.


Doch leider wird die Date
(Row)
erst dann in die DataTable verschoben wenn das
Ereignis abgearbeitet wurde.



??? Was wird wann in die DataTable verschoben?
Diesen Satz verstehe ich nicht.

Gibt es eine andere Möglichkeit?



Schau Dir mal das nachfolgende Beispiel an:

' /// Code in einer leeren Form1
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 Object, _
ByVal e As System.EventArgs _
) Handles Me.Load

DGV = New DataGridView
With DGV
.SetBounds(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 20)

.Anchor = AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom

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

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

End With
Me.Controls.Add(DGV)

CreateData()
DGV.DataSource = mDV

End Sub
Private Sub CreateData()
Dim i As Integer
Dim R As New Random
Dim DR As DataRow
mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))
.Columns.Add("Int", GetType(Integer))
.Columns.Add("Datum", GetType(Date))
For i = 1 To 25
DR = .NewRow
With DR
.Item(0) = i
.Item(2) = R.Next(1, 100)

.Item(3) = _
Date.Today.AddDays(CDbl(.Item(2)))

.Item(1) = _
Format$(CDate(.Item(3)), "dddd")
End With
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)

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

End Sub

Private Sub mDT_ColumnChanged _
(ByVal sender As Object, _
ByVal e As System.Data.DataColumnChangeEventArgs _
) Handles mDT.ColumnChanged

Console.WriteLine _
("mDT_ColumnChanged Row: " & _
mDT.Rows.IndexOf(e.Row).ToString & _
" Col: " & e.Column.ToString & _
"; Proposed Value: " & _
e.ProposedValue.ToString)
End Sub

Private Sub mDT_ColumnChanging _
(ByVal sender As Object, _
ByVal e As System.Data.DataColumnChangeEventArgs _
) Handles mDT.ColumnChanging

Console.WriteLine _
("mDT_ColumnChanging Row: " & _
mDT.Rows.IndexOf(e.Row).ToString & _
" Col: " & e.Column.ToString & _
"; Proposed Value: " & _
e.ProposedValue.ToString)
End Sub

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

If mCM.Current IsNot Nothing Then
Dim DRV As DataRowView = _
DirectCast(mCM.Current, DataRowView)

Me.Text = "Zeile " & mCM.Position.ToString & _
"; ID: " & DRV.Item(0).ToString
End If
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