DataSet & Relations & DGV etc.

05/03/2009 - 10:46 von Maik Weiß | Report spam
Hallo,

ich komme bei einem Problem nicht weiter.
Und zwar hab ich mir zum Testen eine Form mit zwei DataGridViews (DGVs)
erstellt.

Public Class DGV_RelationTest

Dim connString As String =

Private myDS As New DataSet


Private Sub DGV_RelationTest_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load

Using conn As New SqlConnection(connString)
Dim sqlComm As SqlCommand = New SqlCommand("testSP", conn)
sqlComm.CommandType = CommandType.StoredProcedure
sqlComm.Parameters.AddWithValue("@artikelID", "BE-223")
Dim reader As SqlDataAdapter = New SqlDataAdapter(sqlComm)
reader.TableMappings.Add("Table", "Artikel")
reader.TableMappings.Add("Table1", "Lieferanten")
reader.Fill(myDS)
End Using


Dim rel As New DataRelation("test", _
myDS.Tables("Artikel").Columns("ID_artikel"), _
myDS.Tables("Lieferanten").Columns("ID_artikel"))

myDS.Relations.Add(rel)

'DGVs Datenquelle zuweisen
DataGridView1.DataSource = myDS.Tables("Artikel")
DataGridView2.DataSource = myDS.Tables("Lieferanten")
End Sub
End Class

Der PK 'ID_artikel' von der Tabelle 'Artikel' ist ein String.

Mein Wunsch ist es, wenn ich im DGV2 (bei den Lieferanten) unten in eine
neue Zeile klicke, dass dann dort der ID_Artikel wert automatisch
eingetragen wird.

Könnt ihr mir weiter helfen und habt evtl. eine Lösung für mich?

Sicher stimmt was mit den Relations nicht und/oder es fehlt noch einiges.
Hatte mir die Beispiele von Peter Götz (www.gssg.de) angeschaut, aber da
ist so einiges im Relation-Bsp verwirrt und soviel Code-Balast drin, dass
man da nur sehr schwer durch steigt.


Vielen Danke und Gruß

Maik
 

Lesen sie die antworten

#1 Peter Fleischer
05/03/2009 - 10:58 | Warnen spam
"Maik Weiß" schrieb im Newsbeitrag
news:qckyqt5fb3ck.1xydfh8xx3l0x$

ich komme bei einem Problem nicht weiter.
Und zwar hab ich mir zum Testen eine Form mit zwei DataGridViews (DGVs)
erstellt.

Public Class DGV_RelationTest

Dim connString As String =

Private myDS As New DataSet


Private Sub DGV_RelationTest_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load

Using conn As New SqlConnection(connString)
Dim sqlComm As SqlCommand = New SqlCommand("testSP", conn)
sqlComm.CommandType = CommandType.StoredProcedure
sqlComm.Parameters.AddWithValue("@artikelID", "BE-223")
Dim reader As SqlDataAdapter = New SqlDataAdapter(sqlComm)
reader.TableMappings.Add("Table", "Artikel")
reader.TableMappings.Add("Table1", "Lieferanten")
reader.Fill(myDS)
End Using


Dim rel As New DataRelation("test", _
myDS.Tables("Artikel").Columns("ID_artikel"), _
myDS.Tables("Lieferanten").Columns("ID_artikel"))

myDS.Relations.Add(rel)

'DGVs Datenquelle zuweisen
DataGridView1.DataSource = myDS.Tables("Artikel")
DataGridView2.DataSource = myDS.Tables("Lieferanten")



Hi Maik,
hier sollte anders gebunden werden um hierarchisch zu arbeiten.

End Sub
End Class

Der PK 'ID_artikel' von der Tabelle 'Artikel' ist ein String.

Mein Wunsch ist es, wenn ich im DGV2 (bei den Lieferanten) unten in eine
neue Zeile klicke, dass dann dort der ID_Artikel wert automatisch
eingetragen wird.



In deinem Beispiel hast du die gesamte Tabelle "Lieferanten" ohne Bezug auf
"Artikel" gebunden. Damit ist unklar, welche Artikel-ID einzutragen ist.

Könnt ihr mir weiter helfen und habt evtl. eine Lösung für mich?



Allein aus deiner Darstellung müsste "Lieferant" Child-Tabelle sein und
"Artikel" die MAster-Tabelle sein. So etwas ist schwer vorstellbar.

Wenn das wirklich so sein soll, dann wàre die folgende Binding für dein Ziel
erforderlich:

Dim bs1 As New BindingSource(myDS, "Artikel")
Dim bs2 As New BindingSource(bs1, "test")
DataGridView1.DataSource = bs1
DataGridView2.DataSource = bs2

Sicher stimmt was mit den Relations nicht und/oder es fehlt noch einiges.
Hatte mir die Beispiele von Peter Götz (www.gssg.de) angeschaut, aber da
ist so einiges im Relation-Bsp verwirrt und soviel Code-Balast drin, dass
man da nur sehr schwer durch steigt.



Die Beispiele von Peter sind doch recht einfach und übersichtlich. Nur
"Hello World" zu programmieren, ist natürlich einafcher und übersichtlicher
:-)

Viele Grüsse
Peter

Ähnliche fragen