Von einer BindingSource in einer anderen BindingSource einfügen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Von einer BindingSource in einer anderen BindingSource einfügen

    Hallöchen,

    ich habe ein DataSet und auf meiner Form eine Listbox in der ich Daten über die VertragspartnerBindingSource anzeigen lasse. In einer anderen Listbox möchte ich Daten einfügen, jedoch in die dort angebundene VertragBindingSource.
    Wie mache ich das am Besten?

    So habe ich es bisher versucht aber das klappt nicht optimal, daher meine Frage. (nicht optimal im Sinne von ich muss den Button zweimal betätigen und dann kommt erst der zweite Datensatz und ich glaube, dass sollte so nicht sein)
    Freue mich über eine Rückmeldung.

    VB.NET-Quellcode

    1. Private Sub AddPartner()
    2. Dim SelectedItem As DataRowView = DirectCast(VertragspartnerBindingSource.Current, DataRowView)
    3. Dim _ID As Int32 = DirectCast(SelectedItem("ID"), Int32)
    4. Dim _IK As String = DirectCast(SelectedItem("IK"), String)
    5. Dim _Name As String = DirectCast(SelectedItem("Name"), String)
    6. 'Dim NewItem As DataRowView = DirectCast(VertragBindingSource.List, DataView).AddNew()
    7. 'NewItem.Row.Item("Partner") = _Name
    8. End Sub
    Bilder
    • DataSet.PNG

      16,57 kB, 703×427, 54 mal angesehen
    • Form.PNG

      9,61 kB, 814×416, 56 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Sam85“ ()

    Ich wüde es so machen...

    VB.NET-Quellcode

    1. ​Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If VertragBindingSource.Current Is Nothing Then Return
    3. Dim rw = DirectCast(DirectCast(VertragBindingSource.Current, DataRowView).Row, VertragRow)
    4. DataSet1.VertragsPartner.AddVertragsPartnerRow(rw, TextBox1.Text)
    5. End Sub
    @VB1963: Hast Du das getestet? Denn: 2 Parameter, wobei der 1. eine DataRow ist, kommt mir komisch vor.
    @Sam85: Den BindingSources selber sollte nix hinzugefügt werden, dafür sind - wie VB1963 bereits schrieb - Dein tDS und die entsprechenden DataTables da. Und zwar in typisierter Art. Dein Code ist mit diesen Suchstrings untypisiert. Und damit fehleranfällig.
    Du willst einen Vertragspartner/Krankenkasse mit Institutskennzeichen hinzufügen. Ok. Dafür braucht es aber die anderen Tabellen nicht, da Deine Vertragspartner-Tabelle unabhängig von anderen Tabellen ist. Das Hinzufügen benötigt nur die Angaben: Name und IK. Die Vertrags-Tabelle ist hingegen von den anderen 3 Tabellen abhängig. Wenn Du dieser Tabelle was hinzufügen willst, musst Du Angaben zu den für diese Vertragszeile relevanten Tabelleneinträgen machen. Das heißt ggf. Vertragsnehmer, Vertragsgeber und Vertragspartner. Dafür kannst Du - falls zutreffend - die per Doppelcast typisierten Currents der anderen BindingSources verwenden. Oder ggf. Nothing, falls sinnvoll. Also z.B.:

    VB.NET-Quellcode

    1. Dim AktuellerVertragspartner As VertragspartnerRow = Nothing
    2. If VertragspartnerBindingSource.Current IsNot Nothing Then AktuellerVertragspartner = DirectCast(DirectCast(VertragspartnerBindingSource.Current, DataRowView).Row, VertragspartnerRow)
    3. Dim AktuellerVertragsnehmer As VertragsnehmerRow = Nothing
    4. If VertragsnehmerBindingSource.Current IsNot Nothing Then AktuellerVertragsnehmer = DirectCast(DirectCast(VertragsnehmerBindingSource.Current, DataRowView).Row, VertragsnehmerRow)
    5. Dim AktuellerVertragsgeber As VertragsgeberRow = Nothing
    6. If VertragsgeberBindingSource.Current IsNot Nothing Then AktuellerVertragsgeber = DirectCast(DirectCast(VertragspartnerBindingSource.Current, DataRowView).Row, VertragsgeberRow)
    7. DataSet1.Vertrag.AddVertragRow(?, ?, ?, AktuellerVertragsnehmer, AktuellerVertragsgeber, AktuellerVertragspartner) '*


    *Was sind in der Vertragstabelle die Spalten Name, Nehmer und Partner? Ich hoffe nicht, dass dies die Namen aus den anderen Tabellen sind. Sonst hättest Du nämlich mit den Foreign-IDs und den Namen Datenredundanz. Daher habe ich an diesen Stellen als Parameter nur "Die Drei ???" eingetragen, da ich nicht erkennen kann, wofür die sind oder von welchem Typ.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ja - ich habe das getestet...
    Zum Hinzufügen einer Childrow, die von der Masterrow mit 1:n in Beziehung steht, brauche ich die Masterrow als Parameter...
    Warum soll das nicht passen?
    @Sam85 verwuzelt da etwas - so wie ich sein Anliegen verstehe - will er von einer Childrow zurrück in die Masterrow kopieren. Was soll das bringen?
    Sein Datenmodel besagt doch, dass ein Vertrag mehrere Vertragspartner inne haben kann. Also Vertragtabelle:Vertragspartnertabelle -> 1:n-Relation

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()

    X/ (da es keine facepalm gibt). Denkfehler. Natürlich. Du hast recht. Da bei mir die Foreign-Keys immer ganz zum Schluss in der Tabelle kommen, habe ich mich von der Parameterreihenfolge verwirren lassen. Aber: Da die VertragspartnerTable der VertragsTable übergeordnet ist, ist da quasi ein Richtungsfehler im Code.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Uuup's - ich habe gestern sein Datenmodel falsch interpretiert - er will's ja umgekehrt ... Faschingdienstag :)
    Na ja, dann einfach das Ganze umdrehen...

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If VertragPartnerBindingSource.Current Is Nothing Then Return
    3. Dim rw = DirectCast(DirectCast(VertragPartnerBindingSource.Current, DataRowView).Row, PartnerRow)
    4. DataSet1.Vertrag.AddVertragRow(rw, TextBox1.Text)
    5. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()