CommandBuilder und master-Detail Datagridviews

02/04/2008 - 22:47 von Gutelade | Report spam
Hallo zusammen,
macht die Verwendung eines CommandBuilders Sinn bei der Darstellung einer
Master-Detail-Beziehung zweier DataGridViews und der Verwendung von
BindingSources, an dem wiederum Textfelder hàngen? Wie ist die beispielhafte
Implementierung?
Vielen Dank
 

Lesen sie die antworten

#1 Peter Fleischer
03/04/2008 - 06:17 | Warnen spam
"Gutelade" schrieb im Newsbeitrag
news:

macht die Verwendung eines CommandBuilders Sinn bei der Darstellung einer
Master-Detail-Beziehung zweier DataGridViews und der Verwendung von
BindingSources, an dem wiederum Textfelder hàngen?



Definiere mal die Tàtigkeit "Sinn machen". Vielleicht ist dann klarer, was
du meinst:-)

Für das Aktualisieren der Daten in einer externen Datenbank benötigt man
konkrete SQL-Anweisungen. Diese Anweisungen kann man selbst schreiben, von
einem Designer erzeugen lassen oder zur Ausführungszeit bei Bedarf durch den
CommandBuilder auf Basis der SQL-Anweisung aus dem SelectCommand-Objekt
erzeugen lassen. Da es sich bei einer Master-Detail-Struktur um zwei
verschiedene Aktualisierungen handelt (Master und Detail), sind bei Nutzung
des CommandBuilders auch zwei unterschiedliche CommandBuilder (bezüglich des
SelectCommand-Objektes) erforderlich.

Wie ist die beispielhafte
Implementierung?



Hier mal eine Realisierung in VB.NET als Beispiel für eine OleDb-Lösung
(z.B. Access).Voraussetzung dafür ist, dass beim Insert des Masters auch der
Primàrschlüssel aktualisiert wird (z.B. im OnRowUpdated).

' Update starten
Private Sub Button10_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button10.Click

Dim cb1 As New OleDbCommandBuilder(masterDataAdapter)
Dim cb2 As New OleDbCommandBuilder(childDataAdapter)

Me.BindingContext(dset, "Master").EndCurrentEdit()
Me.BindingContext(dset, "Child").EndCurrentEdit()

Dim myDataRowArray() As DataRow
Try
' New Row's

myDataRowArray = dset.Tables("Master").Select(Nothing, _
Nothing, DataViewRowState.Added)
masterDataAdapter.Update(myDataRowArray)

myDataRowArray = dset.Tables("Child").Select(Nothing, _
Nothing, DataViewRowState.Added)
childDataAdapter.Update(myDataRowArray)

' Updated Row's

myDataRowArray = dset.Tables("Master").Select(Nothing, _
Nothing, DataViewRowState.ModifiedCurrent)
masterDataAdapter.Update(myDataRowArray)

myDataRowArray = dset.Tables("Child").Select(Nothing, _
Nothing, DataViewRowState.ModifiedCurrent)
childDataAdapter.Update(myDataRowArray)

' Deleted Row's

myDataRowArray = dset.Tables("Child").Select(Nothing, _
Nothing, DataViewRowState.Deleted)
childDataAdapter.Update(myDataRowArray)

myDataRowArray = dset.Tables("Master").Select(Nothing, _
Nothing, DataViewRowState.Deleted)
masterDataAdapter.Update(myDataRowArray)

Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

Du erhöhst Deine Chance, dass Deine Frage überhaupt gelesen und qualifiziert
und schnell beantwortet wird, wenn Du Deinen Realnamen im Absender
einstellst (Vor- und Zuname).

Viele Gruesse

Peter

Ähnliche fragen