Die Zeilen in einer Datatable bilden eine Auflistung.
Es können deshalb Zeilen gelöscht, eingefügt oder angehängt werden.
Durch solche Operationen verändert sich der Bezug zwischen
dem "rowindex" und der Datenzeile, die dadurch abgefragt wird.
Aus diesem Grund benötigt man eindeutige Schlüssel, wenn man
Datensätze in Tables auf den Inhalt einer Datenbank oder auf
andere Tables beziehen will. Schlüssel können über mehrere Spalten
definiert sein.
Hier ein Beispiel für eine Beziehung zwischen zwei Tabellen
in einem Dataset über eine Datarelation (per PrimaryKey).
Private Sub TableRelation()
Dim dt1 As New DataTable
dt1.Columns.Add("RPM", GetType(Integer))
dt1.Columns.Add("Sound", GetType(String))
With dt1.Rows
.Add(1000, "surr")
.Add(1200, "brumm")
.Add(1500, "brumm")
.Add(2500, "pfeif")
.Add(4000, "rassel")
.Add(5000, "schepper")
.Add(6000, "kaputt")
End With
dt1.PrimaryKey = {dt1.Columns("RPM")} 'eindeutiger Schlüssel
Dim dt2 As New DataTable
dt2.Columns.Add("RPM_2", GetType(Integer))
dt2.Columns.Add("Sound", GetType(String))
With dt2.Rows
.Add(2500, "brumm")
.Add(4000, "quietsch")
.Add(6000, "jaul")
.Add(1500, "surr")
.Add(1200, "surr")
.Add(1000, "surr")
End With
dt2.PrimaryKey = {dt2.Columns("RPM_2")} 'eindeutiger Schlüssel
'gemeinsames Dataset
Dim ds As New DataSet("RPM_Set")
ds.Tables.Add(dt1) : ds.Tables.Add(dt2)
'Beziehung zwischen Tabellen über eine Datarelation
Dim dr As New DataRelation _
("RPM_Relation", dt1.Columns("RPM"), dt2.Columns("RPM_2"), True)
ds.Relations.Add(dr)
For r1 As Integer = 0 To dt1.Rows.Count - 1
'korrespondierende Zeilen zur r-Zeile in dt1 '
'per Relation aus dt2 abfragen
Dim rows_in_dt2 As DataRow() = dt1.Rows(r1).GetChildRows(dr)
If rows_in_dt2.Count = 0 Then
Console.WriteLine _
(dt1.Rows(r1)("RPM").ToString & _
" keine Entsprechung in Tabelle 2")
Else
For rc As Integer = 0 To rows_in_dt2.Count - 1
Console.WriteLine _
(dt1.Rows(r1)("RPM").ToString & "--->" & _
rows_in_dt2(rc)("Sound").ToString)
Next rc 'Childrows zur row r1 ind dt1
End If
Next r1
End Sub
Beitrag wurde zuletzt am 30.10.14 um 12:56:58 editiert. |