Relation DB-Laden

30/01/2008 - 16:38 von Christian Bayer | Report spam
Hallo,

ich zeige auf einem Formular mehrere Tabellen in Master-Detail-Beziehungen
an. Dazu habe ich mehrere Relation definiert und alles über Databinding mit
den Datagrids verknüpft.

Soweit funktioniert auch alles.

Nun lade ich im Hintergrund neue Daten ohne nochmals zu verknüpfen. Wenn ich
nun scrolle werden die passenden Datensàtze in den Detail-Grids angezeigt,
aber NICHT der erste Datensatz bevor ich scrolle.

Wie erreiche ich, das schon nach dem Laden der neuen Daten die passenden
Detail-Tabellen angezeigt werden?

Scrollen tue ich per :BindingContextPosition


Danke
 

Lesen sie die antworten

#1 Peter Fleischer
03/02/2008 - 19:10 | Warnen spam
"Christian Bayer" schrieb im Newsbeitrag
news:

ich zeige auf einem Formular mehrere Tabellen in Master-Detail-Beziehungen
an. Dazu habe ich mehrere Relation definiert und alles über Databinding
mit den Datagrids verknüpft.

Soweit funktioniert auch alles.

Nun lade ich im Hintergrund neue Daten ohne nochmals zu verknüpfen. Wenn
ich nun scrolle werden die passenden Datensàtze in den Detail-Grids
angezeigt, aber NICHT der erste Datensatz bevor ich scrolle.

Wie erreiche ich, das schon nach dem Laden der neuen Daten die passenden
Detail-Tabellen angezeigt werden?

Scrollen tue ich per :BindingContextPosition



Hi Christian,
da wird in deinem Code ein Problem sein. Mit dem folgenden Beispiel kann ich
das Problem nicht reproduzieren:

Option Infer On
Option Strict Off

Imports System.Data.Linq

Public Class Form1

Dim dgv1, dgv2 As DataGridView

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim bs1 = TestData.GetBindingSource1
Dim bs2 = TestData.GetBindingSource2

Dim btn As New Button
Me.Controls.Add(btn)
With btn
.Dock = DockStyle.Bottom
.Text = "neue Datensàtze"
AddHandler .Click, AddressOf btnClick
End With


dgv2 = New DataGridView
With dgv2
Me.Controls.Add(dgv2)
.Dock = DockStyle.Fill
.DataSource = bs2
End With
dgv1 = New DataGridView
With dgv1
Me.Controls.Add(dgv1)
.Dock = DockStyle.Top
.DataSource = bs1
.AllowUserToAddRows = False
End With

bs1.Position = 1

End Sub

Private Sub btnClick()
Dim pos1 = CType(CType(TestData.GetBindingSource1.Current, _
DataRowView)(0), Integer)
Dim dt2 = TestData.ds.Tables(1)
For i = 1 To 3
Dim r = dt2.NewRow
r(1) = pos1
r(2) = "Child-Datensatz"
dt2.Rows.Add(r)
Next
End Sub

Private Class TestData
Public Shared ds As New DataSet
Private Shared bs1, bs2 As New BindingSource
Shared Sub New()
Dim dt1 As New DataTable("Master")
With dt1.Columns
.Add("ID", GetType(Integer))
With .Item(0)
.AutoIncrement = True
.AutoIncrementSeed = -1
.AutoIncrementStep = -1
End With
.Add("Col1", GetType(String))
End With
ds.Tables.Add(dt1)
For i = 1 To 10
dt1.Rows.Add(dt1.NewRow)
dt1.Rows(dt1.Rows.Count - 1)(1) = i.ToString & " Master-Zeile"
Next
Dim dt2 As New DataTable("Child")
With dt2.Columns
.Add("ID", GetType(Integer))
With .Item(0)
.AutoIncrement = True
.AutoIncrementSeed = -1
.AutoIncrementStep = -1
End With
.Add("FK", GetType(Integer))
.Add("Col2", GetType(String))
End With
ds.Tables.Add(dt2)
ds.Relations.Add(New DataRelation("rel1", _
dt1.Columns(0), dt2.Columns(1)))
With bs1
.DataSource = ds
.DataMember = "Master"
End With
With bs2
.DataSource = bs1
.DataMember = "rel1"
End With
End Sub
Public Shared Function GetBindingSource1() As BindingSource
Return bs1
End Function
Public Shared Function GetBindingSource2() As BindingSource
Return bs2
End Function
End Class

End Class

Viele Gruesse

Peter

Ähnliche fragen