Benutzer mit den meisten Antworten
BindingSource DataMember -> Daten ändern...

Frage
-
Hallo Ich stehe gerade total am Schlauch... - Bitte um eure Hilfe Folgende Situation: Ich habe Hierachsiche Daten. Eine BindingSource.DataSource ist an die Datenquelle gebunden. Die zweite BindingSource hat als DataSource die erste BindingSource und als DataMember die "Child-Table" Wenn ich mein Grid ansehe, werden die Daten korrekt angezeigt (also ich sehe die Child Tabelle Wenn ich jetzt händisch versuche eine Zeile hinzuzufügen, dann bekomme ich den Fehler, dass die Konvertierung nicht stimmt, da das BindingSource.AddNew eine Zeile vom Type Master-Tabelle erwartet und nicht die Child-Tabelle. Klingt für mich auf eine Art & Weise logisch, da ja die DataSource selbst von der ersten BindingSource stammt, die ja auch an die Master-Tabelle gebunden ist. - Aber wie füge ich dann in diesem Fall eine Child-Tabelle-Zeile in die 2. BindingSource korrekt ein? Hoffe Ihr versteht was ich meine.... DANKE
Antworten
-
Hier mal eine kleine Demo, wie das problemlos funktioniert; einfach in den Codeteil eines Formulars einer neuen VB Windows Forms Anwendung kopieren:Public Class Form1Dim sc As New SplitContainer With {.Dock = DockStyle.Fill}Dim dgv1 As New DataGridView With {.Dock = DockStyle.Fill}Dim dgv2 As New DataGridView With {.Dock = DockStyle.Fill}Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadMe.Controls.Add(sc)sc.Panel1.Controls.Add(dgv1)sc.Panel2.Controls.Add(dgv2)dgv1.DataSource = TestData.BS1dgv2.DataSource = TestData.BS2End SubClass TestDataPublic Shared BS1 As BindingSourcePublic Shared BS2 As BindingSourceShared Sub New()Dim ds As New DataSetds.Tables.Add(New DataTable)ds.Tables.Add(New DataTable)With ds.Tables(0)With .Columns.Add("ID", GetType(Integer))..AutoIncrement = True..AutoIncrementSeed = -1..AutoIncrementStep = -1End With.Columns.Add("col1", GetType(String))End WithWith ds.Tables(1)With .Columns.Add("ID", GetType(Integer))..AutoIncrement = True..AutoIncrementSeed = -1..AutoIncrementStep = -1End With.Columns.Add("FK", GetType(Integer)).Columns.Add("col1", GetType(String))End Withds.Relations.Add(New DataRelation("rel1", ds.Tables(0).Columns(0), ds.Tables(1).Columns(1)))For i = 1 To 10Dim r1 = ds.Tables(0).NewRowr1(1) = "Zeile " & i.ToStringds.Tables(0).Rows.Add(r1)For k = 1 To 5Dim r2 = ds.Tables(1).NewRowr2(1) = r1(0)r2(2) = "Zeile " & i.ToString & " " & k.ToStringds.Tables(1).Rows.Add(r2)NextNextBS1 = New BindingSource(ds.Tables(0), "")BS2 = New BindingSource(BS1, "rel1")End SubEnd ClassEnd Class--Viele GrüßePeter
- Als Antwort markiert Zero-G. _ Montag, 2. Mai 2011 05:14
Alle Antworten
-
Hier mal eine kleine Demo, wie das problemlos funktioniert; einfach in den Codeteil eines Formulars einer neuen VB Windows Forms Anwendung kopieren:Public Class Form1Dim sc As New SplitContainer With {.Dock = DockStyle.Fill}Dim dgv1 As New DataGridView With {.Dock = DockStyle.Fill}Dim dgv2 As New DataGridView With {.Dock = DockStyle.Fill}Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadMe.Controls.Add(sc)sc.Panel1.Controls.Add(dgv1)sc.Panel2.Controls.Add(dgv2)dgv1.DataSource = TestData.BS1dgv2.DataSource = TestData.BS2End SubClass TestDataPublic Shared BS1 As BindingSourcePublic Shared BS2 As BindingSourceShared Sub New()Dim ds As New DataSetds.Tables.Add(New DataTable)ds.Tables.Add(New DataTable)With ds.Tables(0)With .Columns.Add("ID", GetType(Integer))..AutoIncrement = True..AutoIncrementSeed = -1..AutoIncrementStep = -1End With.Columns.Add("col1", GetType(String))End WithWith ds.Tables(1)With .Columns.Add("ID", GetType(Integer))..AutoIncrement = True..AutoIncrementSeed = -1..AutoIncrementStep = -1End With.Columns.Add("FK", GetType(Integer)).Columns.Add("col1", GetType(String))End Withds.Relations.Add(New DataRelation("rel1", ds.Tables(0).Columns(0), ds.Tables(1).Columns(1)))For i = 1 To 10Dim r1 = ds.Tables(0).NewRowr1(1) = "Zeile " & i.ToStringds.Tables(0).Rows.Add(r1)For k = 1 To 5Dim r2 = ds.Tables(1).NewRowr2(1) = r1(0)r2(2) = "Zeile " & i.ToString & " " & k.ToStringds.Tables(1).Rows.Add(r2)NextNextBS1 = New BindingSource(ds.Tables(0), "")BS2 = New BindingSource(BS1, "rel1")End SubEnd ClassEnd Class--Viele GrüßePeter
- Als Antwort markiert Zero-G. _ Montag, 2. Mai 2011 05:14