dedlfix: [C#/WinForms/SQL] DataViewGrid und ForeignKeys

Beitrag lesen

Hi!

Jepp, das DVG ist nur für die Anzeige. Was mich halt etwas irritiert hat war dein "unnötig" in deiner ersten Antwort... wenn ich das Namensfeld *zusätzlich* mit aufnehme sollte ich die ID im DVG ausblenden, da ich ansonsten eine überflüssige Spalte hab (und wenn ich die ID im select weglasse fehlt sie mir in der Tabelle um sie speichern zu können)

Bei dem "unnötig" kannte ich deine Konstellation noch nicht so genau. Ich nahm an, dass das DGV auch zu Editieren herhalten soll und dann reichte da eine ComboBox-Spalte. Mit den neuen Erkenntnissen, dass das DGV nur zum Anzeigen und das Ändern anderswo geschieht, muss ich das sogar empfehlen.

Also nochmal im Ganzen: Die DataTable bekommt zusätzlich das Klartextfeld und das Select fragt es geeignet ab (Subquery, Join). Ignorieren beim Anzeigen - klar, du nimmst natürlich nur die Felder aus der DT in das DGV auf, die du anzeigen willst. Für das Editieren bekommt nur das FK-Feld ein Element, nämlich eine normale ComboBox. Dort befüllst du bereits genannten Eigenschaften, für die Ausklappwerte.

Diese Lösung bietet keine Aktualisierung des Klartextfeldes in der DT, wenn du in der ComboBox was neues auswählst. Ein einfacher Hack wäre, beim Speichern in die DT (nicht beim Change-Event der ComboBox, denn danach kann immer noch ein Abort des gesamten Editierens erfolgen) den ausgewählten Klartext in die DT zu übertragen, ansonsten bekommst du da eine Aktualisierung erst beim erneuten Lesen aus der Quelle nach dem Update aller Änderungen im DataSet (oder zumindest der einen Tabelle daraus).

Alternativ kannst du auch im DGV eine CB-Column nehmen und auf ReadOnly setzen, dann müsste diese sich automatisch bei Änderungen in der DT die Werte umschreiben. Wobei ich mir jetzt nicht sicher bin, ob sich bereits auf dem Schirm befindliche Werte aktualisieren, wenn sich hintenrum was ändert. Auf alle Fälle solltest du den neuen Wert beim Befüllen des DGV sehen. Aber auch beim ReadOnly zeigt die CB das Auswahldreieck an der rechten Seite an. Wenn dich das stört, dann geht das so natürlich nicht.

Lo!