Fremdschlüssel aus DataSet auslesen

  • VB.NET

Es gibt 65 Antworten in diesem Thema. Der letzte Beitrag () ist von hoobeN.

    hoobeN schrieb:

    bin ich leider noch zu unerfahren, als dass ich wüsste, was mit dem gelesenen anzufangen ist

    Na, v.a. kannste da nachgucken, welche Properties, Functions, Subs, Events in einer klasse drinne sind, und deren Argumente und Rückgabewerte (die "Signaturen" also).
    Also wenn du sowas zu verstehen zu unerfahren bist, dann fragichmich ühaupt, wie du programmieren kannst, und scheint ja ziemlich zu funzen.

    Unerfahrenheit kann abgeholfen werden: dieses Buch Lesen
    Das buch kost nix und ist eine Referenz für alle Fragen, die MSDN nicht gescheit beantwortet. Wenn mans von vorne bis hinten durchliest (und das täte ich empfehlen), hat man eine glaub bessere Ausbildung genossen, als so mancher Informatik-Azubi.

    Auch in die Kapitel reingugge, wo man denkt, man weißes schon. Da täuscht man sich nämlich leicht.


    + in einem Extrafeld soll gleichzeitig der Name des Ersatzes stehen, ich glaube das ist das eigentliche Problem
    Is kein Problem, da bindet man halt eine Combobox an die Ersatz-Spalte, die ihre DataSource auch aus der Table holt, und als Displaymember "Name" eingestellt hat.

    gugge die vier Views (WinForms) - habichdas noch nicht empfohlen? Jo, habichschon empfohlen.
    Ist das dort zu Comboboxen dargelegte iwie unverständlich, oder wird auf deim Browser nicht angezeigt?

    (Sorry, ich bin garstig. Dabei kommt von meinen Äußerungen bei dir ja sogar überdurchschittlich viel an, im Vergleich)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Die Frage, warum ich das "kann" scheint mir berechtigt, weil ichs nie irgendwo richtig gelernt habe, sondern mir größtenteils einfach alles irgendwie selbst angeeignet habe...also die logiken hinter den meisten sachen kann ich gut nachvollziehen, allerdings fehlen mir einfach bei vielen sachen noch die routine und vorallem der weg um die logik vernünftig umsetzen zu können.

    (Sorry, ich bin garstig. Dabei kommt von meinen Äußerungen bei dir ja sogar überdurchschittlich viel an, im Vergleich)
    das fasse ich mal als kompliment auf, danke! :D

    und das mit der combobox habe ich bereits versucht, jedoch scheitert es daran, dass sobald ich als Displaymember den Namen eingebe, er immer den namen des eigentlichen mitarbeiters ausspuckt und nicht den des ersatzes, obwohl valuemember ersatz ist.
    und im Dataset ist PrimKey die ID, und ForeignKey ist Ersatz?

    weil das wäre lustigerweise falschrum.

    Denn das würde definieren, dasses für jeden Mitarbeiter mehrere Ersätze gibt, und sowas kann man in einer ComboZelle nicht anzeigen, dafür bräuchte manjane listbox.

    Deshalb muß man die Relation grad annersrum stricken: Übergeordnet sei Ersatz, und ID untergeordnet. Aber ohne ForeignKeyEinschränkung und sowas.

    naja, habich jetzzt auch probiert - geht nicht mit Combos, weil da auch null-Werte vorkommen.

    Also Textboxen hinmachen, und mit DataExpressions den Verweis auf den übergeordneten Ersatz darstellen.

    Ist leider Readonly
    ich habmawas probiert, wo ErsatzID die übergeordnete DataTable ist, und mit DataExpression.

    Aber ist ja auch ein komisches Modell, bei dems für jeden maximal einen Ersatz gibt, statt mehrere.
    Dateien
    • ErsatzApp00.zip

      (86,09 kB, 59 mal heruntergeladen, zuletzt: )
    Ich bin gerade wieder fleißig und bemerke, dass deine DataExpression "parent.Name" ist, worauf bezieht sich denn parent? Wenn ich das versuche, dann schmeißt er mir den Fehler, dass Mitarbeiter mehrere Relations hat und ich präziser werden muss. "Die Tabelle [Mitarbeiter] hat mehrere Beziehungen. Geben Sie einen eindeutigen Beziehungsnamen im Ausdruck 'System.Data.LookupNode' an."

    Danke übrigens für dein Beispiel! :)

    Ich habe zumindest rausgefunden, dass ich parent(Mitarbeiter_Mitarbeiter).Name benutzen muss, aber jetzt wirft er mir folgenden Fehler: "Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in System.Data.dll aufgetreten.

    Zusätzliche Informationen: The column mapping from SourceColumn 'M_Ersatz' failed because the DataColumn 'M_Ersatz' is a computed column."

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hoobeN“ ()

    hoobeN schrieb:

    Ich bin gerade wieder fleißig und bemerke, dass deine DataExpression "parent.Name" ist, worauf bezieht sich denn parent?
    Jo, in meim Sample kann ich das so machen, weils nur eine Parent-DataRelation in der Tabelle gibt. Aber du hast ja bereits die richtige Lösung gefunden :thumbsup:

    In DataExpressions wird doch erwähnt, dass berechnete Spalten nix - garnix mitte DB zu schaffen haben (oder habichs vergessen zu erwähnen?). V.a. braucht man die auch nicht abzuspeichern, und daher brauchts auch kein Column-Mapping. Das sagt ja auch die Exception.

    Oder hast du gar einen Bug in meine [VB 2008] DBExtensions gefunden?
    ich denke das soll schon so sein :P
    okay, das funktioniert jetzt in der Theorie wunderprächtig, allerdings kann ich die neue spalte "test" keiner textbox als Databinding hinzufügen (kann es zumindest nicht auswählen und wenn ich es manuell eintrage, passiert nichts)
    muss ich da noch irgendwas zu coden?

    habe jetzt auch noch versucht es manuell im code zu binden mit

    VB.NET-Quellcode

    1. txtErsatz.DataBindings.Add(txtErsatz.Text, MitarbeiterBindingSource, "test")

    aber da bekomme ich entweder ne Fehlermeldung bei .Fill() - "DataBinding cannot find a row in the list that is suitable for all bindings." oder es passiert wieder nichts.

    ich schätze mal das hat was damit zu tun, dass das dataset immer mit der datenbank synchron ist und wenn es die spalte "test" nun mal nicht gibt, dann gibt es sie nicht ;>.
    Also scheint es mir so, dass es keine Lösung für mein Problem gibt, außer ich dupliziere die Mitarbeiter Tabelle und referenziere sie so miteinander.

    Naja gut, ich werde erst im nächsten Jahr wieder da sein um dich nerven zu können, also wünsche ich dir ein erholsames Fest und einen guten Rutsch ins neue Jahr!
    Bis demnächst! ;)

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

    hoobeN schrieb:

    allerdings kann ich die neue spalte "test" keiner textbox als Databinding hinzufügen (kann es zumindest nicht auswählen und wenn ich es manuell eintrage, passiert nichts)

    hmm. ich hab kein Prob damit.
    ErsatzApp00.zip


    und händisch gecodet:

    VB.NET-Quellcode

    1. txtErsatz.DataBindings.Add("Text", MitarbeiterBindingSource, "test")

    Die "Text"-Property von txtErsatz wird an die "test" - Property der bindingsource gebunden (wobei "test" eine virtuelle Property ist, das ist eine Besonderheit der Bindingsource).
    Sooo, da bin ich wieder :)
    Zunächst ein frohes neues Jahr!

    und jetzt ...

    Es funktioniert zumindest so weit, dass ich mein Feld "test" einer Textbox zuweisen kann, allerdings zeigt es die ganze Zeit einfach nichts an. Wenn ich auf Datenvorschau gehe, dann sehe ich, dass die korrekten Daten drinstehen, aber anzeigen will er sie nicht.
    Noch eine Idee? :D

    edit:

    ich habe grade eine Art "Bug" entdeckt...also wenn ich beim form_load direkt das datenset füllen lasse, dann gibt die textbox mir die daten, die ich haben will. Sobald ich aber die Suche durchgeführt habe, macht er das nicht mehr... :-/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hoobeN“ ()

    naja, ich gehe mal davon aus, dass die textbox die daten nicht anzeigen kann, weil ich bei der suche das dataset via sql abfrage neu fülle und das feld "test" keine daten mehr enthalten kann, weil es nicht in der datenbank vorhanden ist.
    hast du eine idee, wie ich es anders machen kann?
    nö, das sollte kein problem sein.

    Beim Databinding werden die Daten angezeigt, die da sind. Und wenn nach deiner Suche Daten da sind, werden die auch angezeigt.

    Das setzt natürlich voraus, dass das Databinding richtig gesetzt ist, und dass die Suche auch dieselbe Datateble befüllt, an der auch das Control hängt.

    Manche Spezis klatschen ja ein New überall vor, und erstellen dadurch auch neue Tabellen, und befüllen die mitte Suchergebnisse, und wundern sich, dass in den eiglichen Tabellen nix angezeigt wird.
    Meine Suche ist ja bereits hier irgendwo im Thread zu finden...und wie gesagt, wenn ich beim form_load einfach die daten laden lasse, dann zeigt er es mir auch korrekt an, aber sobald die suche ausgeführt wurde, ist die textbox wieder leer.
    Und ich benutze nirgends ein new und das databinding sollte auch richtig gesetzt sein... :/