Im Prinzip sollte die Master(Computer)-Detail(System)-Beziehung funktionieren.
Der CreateConstraints-Parameter der Relation muß auf "false" gesetzt werden.
Public Class frmComboRelation
Dim ds As New DataSet
Dim dtmaster As New DataTable
Dim dtDetail As New DataTable
Dim dtm, dtd As DataTable
Dim bsMaster As New BindingSource
Dim bsDetail As New BindingSource
Dim cbo As New ComboBox With {.Parent = Me}
Dim dgvDetail As New DataGridView With _
{.Parent = Me, .AllowUserToAddRows = False, _
.Top = 50, .Width = 300, .Height = 400}
Private Sub frmComboRelation_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
'Computer-Tabelle
With dtmaster.Columns
.Add("ID", GetType(Integer))
.Add("Computer")
.Add("SystemID", GetType(Integer))
End With
With dtmaster.Rows
.Add(1, "A (Dos)", 2)
.Add(2, "B (Dos)", 2)
.Add(3, "C (Unix)", 3)
.Add(4, "D (Linux)", 1)
.Add(5, "E (Linux)", 1)
.Add(6, "F (----)", -1)
End With
dtmaster.PrimaryKey = {dtmaster.Columns(0)}
dtmaster.TableName = "Computer"
'Tabelle der Betriebssysteme
dtDetail.Columns.Add("ID", GetType(Integer))
dtDetail.Columns.Add("System")
With dtDetail.Rows
.Add(1, "Linux")
.Add(2, "Dos")
.Add(3, "Unix")
.Add(4, "Windows")
End With
dtDetail.PrimaryKey = {dtDetail.Columns(0)}
dtDetail.TableName = "Systeme"
'Dataset mit Tabellen
ds.Tables.AddRange({dtmaster, dtDetail})
'Relation
ds.Relations.Add(New DataRelation("ComputerSystem", _
dtmaster.Columns("SystemID"), dtDetail.Columns("ID"), False))
'Bindingsourcen für Master-Detail-Beziehung belegen
bsMaster.DataMember = dtmaster.TableName
bsMaster.DataSource = ds
bsDetail.DataMember = "ComputerSystem"
bsDetail.DataSource = bsMaster
'Datenbindungen
cbo.ValueMember = dtmaster.Columns("Computer").ColumnName
cbo.DataSource = bsMaster
dgvDetail.DataSource = bsDetail
End Sub
End Class
Beitrag wurde zuletzt am 10.09.15 um 12:16:12 editiert. |