Announcement

Collapse
No announcement yet.

Textfeld an ein Dataset binden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Textfeld an ein Dataset binden

    Das Befüllen der Textfelder abhängig von der Auswahl in meiner Combobox klappt nun super, bis auf ein Feld und zwar das mit dem Country Tag.

    XML-Datei
    <Location>Erlangen</Location>
    VB.Net Code
    TextBox11.DataBindings.Add("Text", ds.Tables(0), "Location") --> ist okay

    XML-Datei
    <Country ID="DE">Deutschland</Country>
    VB.Net Code
    TextBox12.DataBindings.Add("Text", ds.Tables(0), "Country") --> bringt einen Fehler

    Das ist bestimmt nur wieder ein kleiner Kunstgriff aber ich komm irgendwie nicht drauf ich möchte einfach nur den Wert (in diesem Fall Deutschland) haben unabhägig ob da "DE" oder "US" oder sonst was steht.

  • #2
    Das ist bestimmt nur wieder ein kleiner Kunstgriff aber ich komm irgendwie nicht drauf ich möchte einfach nur den Wert (in diesem Fall Deutschland) haben unabhägig ob da "DE" oder "US" oder sonst was steht.
    Du solltest dir im Debugger den Aufbau des erstellten Datasets auch mal ansehen. Dann solltest du verstehen was da passiert. Der Aufbau deiner XML(entnommen aus anderem Thread) läßt eben nicht nur zu das da DE oder US als ID steht sondern das gleichzeitig mehrere Countryzeilen vorhanden sind eben jeweils mit unterschiedlicher ID. Deshalb wird für Country eine Detailtabelle und nicht einfach ein Feld erstellt um mit theoretisch mehrere Countries umgehen zu können.

    Ich würde dir empfehlen wenn der Aufbau der XML so feststeht und nicht dynamisch ist ein typisiertes Dataset oder noch besser gleich echte Klassen zu verwenden. Die kannst du dir mit der XSD.exe aus dem Visual Studio SDK generieren.

    Code:
    C:\>xsd /dataset dealer.xml  // generiert xsd
    C:\>xsd /dataset dealer.xsd  // generiert Sourcecode

    Comment


    • #3
      Müsste es dann nicht auch möglich sein, das ich aus meinem Country Textfeld ein Combofeld mache und mit diesem auf die Detailtabelle zugreife und eine Übersicht über alle hinterlegten Länder mit Ihren zugehörigen ID's erhalte?

      Comment


      • #4
        Müsste es dann nicht auch möglich sein, das ich aus meinem Country Textfeld ein Combofeld mache und mit diesem auf die Detailtabelle zugreife und eine Übersicht über alle hinterlegten Länder mit Ihren zugehörigen ID's erhalte?
        Mit der DataRow.GetChildRows(Relationsname) solltest du an ein Array der Country Rows zu einem Dealer Datensatz kommen um dieses an eine Combobox zu binden. Combobox fände ich aber persönlich falsch da du in einer Combobox auswählst (eine 1 aus N Auswahl) . Es gibt aber in deiner Datenstruktur keine bevorzugte Country Row(außer du definierst bevorzugte Country über ein nicht im Model enthaltenes Argument). Also sollten alle Country Rows gleichwertig angezeigt werden z.B per Listbox oder Grid Control.

        Comment


        • #5
          Wenn ich das richtig verstehe liegen in meinem Dataset 2 Tabellen:

          ds.Tables(0) --> TableName: "Manufacturer"
          ds.Tables(1) --> TableName: "Country"

          leider hab ich den Befehl noch nicht gefunden um mir anzeigen zu lassen welche Spalten je Tabelle tatsächlich abgespeichert sind aber es müsste doch wie in einer Datenbank möglich sein eine Join-Bedigung über beide Tabellen zu erstellen sodaß zu einer bestimmten "Customer_ID" aus der Tabelle "Manufacturer" das entsprechende Land aus der "Country" Tabelle gefunden wird, was ich mir dann in einem Textfeld anzeigen lassen kann, da dieser Datennsatz ja eindeutig ist oder mach ich da nen Denkfehler?

          p.s. Danke für Deine Unterstützung

          Comment


          • #6
            So nun hab ich die Tabellen und ihre Spalten ausfindig gemacht und mal ein anschauliches Diagramm erstellt (siehe Anhang). Jetzt muss es mir nur noch gelingen eine entsprechende JOIN Bedingung zu formulieren und dann sollte ich doch eigentlich auf meine Länderbezeichnung zu greifen können oder?
            Attached Files

            Comment


            • #7
              Ja, du wirst 2 Tabellen haben. Welche Index 0 ist und welche 1 kann ich aber nicht vorhersagen. Du solltest deren string-Schlüssel herausbekommen und diesen anstatt dem Index benutzen. Aus der XML zu schließen werden diese vorraussichtlich "Dealer" und "Country" heißen. (Solltest du im Debugger rausbekommen)

              Damit die beiden Tabellen verknüpft werden können wird intern ein neuer Schlüssel generiert ("Dealer_Id" oder so ähnlich) da kein eindeutiger Schlüssel aus den vorhanden Daten erkennbar ist. >Wie oben solltest du das auch wieder mit dem Debugger rausfinden können

              Ich würde dir weiterhin empfehlen wenn möglich ein typisiertes Dataset oder gleich Klassen zu verwenden. Sonst bleibt das ganze beim Erraten von Schlüsseln und Relationen etc.

              Comment


              • #8
                Das hab ich rausbekommen in meiner Tabelle(0) name Dealer gibt es ein Feld namens Dealer_ID mit den Werten 0 und 1 weil noch nicht mehr Einträge vorhanden sind.
                Die andere Tabelle Tabelle(1) name Country besitzt ein Feld namens ID mit ebenfalls den Werten 0 und 1 und ein Feld namens Countrytext.
                Es gibt in meiner XML Datei zur Zeit nur 2 Eintrgäge deshalb steht in beiden 0 und 1.
                Jetzt möchte ich ein JOIN über diese beiden Tabellen des Datasets bilden in der Art:

                Textfeld = SELECT Countrytext
                FROM DEALER, COUNTRY
                WHERE DEALER_ID=ID

                Sofern das möglich ist muss ich jetzt nur noch die entsprechende Syntax für die Umsetzung auf mein Dataset herausfinden es sei denn Du weißt wie das geht.

                Comment


                • #9
                  Per SQL an ein Dataset gibts nicht.
                  Was du tun könntest wäre der Dealers Tabelle eine berechnete Spalte hinzuzufügen die sich ihre Daten aus der Country Tabelle holt. Hilfe dazu hier.

                  Das Ganze ist mir aber in dieser Form zu abstrus. Ich hatte mehrmals einen anderen Weg vorgeschlagen. Wenn du mit deiner aktuellen Methodik weitermachen möchtest brauchst du jemand anderen der dir weiterhilft.

                  Comment


                  • #10
                    Das ich versuche mit meiner aktuellen Methodik das Problem zu lösen hat nichts mit Deinem Vorschlag zu tun wirklich nicht, lediglich versuche ich für mich den verständlichsten Weg zu finden.
                    Mit Datenbanken und SQL Logik hab ich in der Vergangheit schon sehr viel gemacht daher wäre es für mich viel verstänndlicher wenn sich meine Problematik in ähnlicherweise lösen ließe unabhängig davon ob Deine Variante nicht vielleicht die bessere wäre. Ich hoffe Du kannst das nachvollziehen, denn ich bin Dir für Deine Hilfe und Unterstützung wirklich sehr dankbar.

                    Ich hab herausgefunden das sich JOIN's über Datasets in unten angefügter Weise bilden lassen. Nun hab ich leider das Problem das die Dealer_ID in der Tabelle Dealer beim erstellen des Datasets als Integer angelegt wird und die ID der Tabelle Country als String deshalb erhalte ich eine Fehlermeldung beim Erstellen meiner Relation weil er sagt "Übergeordnete Spalten und untergeordnete Spalten haben keine Spalten mit Typübereinstimmung." Ist es daher vielleicht möglich den Datentyp der Dealer_ID ebenfalls nachträglich in einen String zu konvertieren?

                    Dim parentCol As DataColumn
                    parentCol = _
                    ds.Tables("Dealer").Columns("Dealer_Id")

                    Dim childCol As DataColumn
                    childCol = _
                    ds.Tables("Country").Columns("ID")

                    Dim myRel As DataRelation
                    myRel = New DataRelation _
                    ("Relation", parentCol, childCol)

                    ds.Relations.Add(myRel)

                    Comment


                    • #11
                      Das ich versuche mit meiner aktuellen Methodik das Problem zu lösen hat nichts mit Deinem Vorschlag zu tun wirklich nicht, lediglich versuche ich für mich den verständlichsten Weg zu finden.
                      So habe ich das auch nicht aufgefasst. Aber mein Weg ist nicht deiner und dann kann ich nur schwer helfen.

                      a.) Deine Country Tabelle sollte auch eine Dealer_id haben schau nochmal richtig hin. Nur ID ist was anderes.
                      b.) Die Relation die du anlegen willst sollte schon längst da sein. (Zumindest eine zwischen den beiden Dealer_ID Spalten in den beiden Tabellen)

                      Comment


                      • #12
                        Ja das verstehe ich, aber durch Deine Hilfe bin ich heute überhaupt soweit gekommen.

                        Du hast recht die Beziehungen zwischen den Tabellen scheinen schon zu bestehen und ich kann mir die Bildung einer extra Relation sparen. Ich habe jetzt sogar den Country_Text-Wert einem bestimmten Textfeld zuweisen können. Nun hab ich nur das Problem wenn in meiner Combobox eine andere "Customer_ID" ausgewählt wird, werden alle Textfelder bis auf dieses mit dem Country_Text aktualisiert. Wie bekomme ich das hin das auch dieses aktualisiert wird?

                        Hier meine Realisierung:

                        TextBox11.DataBindings.Add("Text", ds.Tables(0), "Location") --> wird mir aktualisiert
                        TextBox12.DataBindings.Add("Text", ds.Tables(1), "Country_Text") --> bleibt unverändert

                        Comment

                        Working...
                        X