BindingSource.DataSource & .DataMember zur Laufzeit ändern

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    BindingSource.DataSource & .DataMember zur Laufzeit ändern

    Hallo leute,

    kaue da an einem Problem rum.

    Ausgangssituation:

    Form mit 2 ComboBoxen(Kunde, Bearbeiter) und 1 DataGridView (Rechnung)
    Typisiertes DataSet mit den 3 genannten Begriffen als Tabellen. Kunde & Bearbeiter sind parent von Rechnung mit Relationen FK_Kunde_Rechnung bzw. FK_Bearbeiter_Rechnung

    Beim laden werden die Combos gefilter gefüllt. Also Kunde = Alle Kunden die offene Rechnungen haben bzw. bei Bearbeiter alle Bearbeiter die offene Rechnungen haben.

    Achso, für jede Tabelle gibt es dann noch eine BindingSource.

    User entscheidet über RadioButtons, ob er nun ParentChild-View nach Kunde oder Bearbeiter haben möchte.

    Standart ist Kunde. Demnach ist im Designer auch die RechnungBindingSource so versorgt.

    VB.NET-Quellcode

    1. RechnungBindingSource.DataMember = "FK_Kunde_Rechnung"
    2. RechnungBindingSource.DataSource = KundeBindingSource


    Das funktioniert nun auch alles ganz toll. Ich kann in der Combo den Kunden wählen und im DataGridView bekomme ich die offenen Rechnungen gezeigt.

    Nun wähle ich den RadioButton für Bearbeiter und im Code steht dazu folgendes:

    VB.NET-Quellcode

    1. RechnungBindingSource.DataMember = "FK_Bearbeiter_Rechnung"
    2. RechnungBindingSource.DataSource = BearbeiterBindingSource


    Dann kommt:
    Eine nicht behandelte Ausnahme des Typs "System.ArgumentException" ist in System.Windows.Forms.dll aufgetreten. Zusätzliche Informationen: Die DataMember-Eigenschaft FK_Bearbeiter_Rechnung kann in der DataSource nicht gefunden werden.
    Jemand eine Idee, warum das umstöpseln während der Laufzeit nicht geht? Also die DataMemberEigenschaft ist definitiv da. Ich habe es auch mal von Beginn an gedreht. Also Bearbeiter beim laden als Standard drin. Geht, aber dann der fehler beim switch. Ebenso bringt es nichts, die Zeilen DataMebmber und DataSource zu tauschen. Dann mekert der Compiler, dass div. Spalten nicht gebunden werden können. Also quasi das selbe Problem.

    Ist es vielleicht garnicht möglich zu tauschen? Dachte schon, für Kunde und Bearbeiter jeweils ein Tab zu machen und dann von beginn an alles zu haben, aber ist nicht so elegant und doppelt Designarbeit.

    Wer weiss was?

    Frettchen1982 schrieb:

    Ist es vielleicht garnicht möglich zu tauschen?
    also mit im Designer erstelltem DGV ist das nicht möglich.
    weil da wird jede einzelne Spalte explizit auf die Tabellenspalte hin konfiguriert, und wennde denen da auf einmal eine annere BindingSource vorsetzt, wird das DGV pampig.
    Danke EDR.

    Auch das war eine Möglichkeit die ich befürchtet habe.

    Ich glaube, dann werde ich wohl die TabPage Idee nehmen. DGV im Code generieren ist auch nicht der wahre Jakob.

    Obwohl. Leeres DGV auf die Form und dann im Code die BindingSource dran und die paar Spalten formatiert. Beim Change DGV.Clear, BindingSource umstöpseln und wieder ran ans DGV.

    Sollte dann gehen, oder?
    machs lieber im Designer.
    Das ist ziemlich viel Code, der die Konfigurierereien vornimmt - kannstes ja mal im Designer machen, und dann den DesignerCode angugge.

    Auch ist Designer eine Standard-Vorgehensweise, die vielen Programmierern geläufig ist (sein sollte). Hingegen eine selbstgebastelte Lösung, da wirst nurnoch du durchblicken können, (und in einem halben Jahr vlt. nicht mal mehr) - also Thema Wartbarkeit.