Ich habe ein Binärfeld in meiner Datenbank, das auf einer Benutzeroberfläche nur schwer mit einem einzigen "Is XXXX?" - Kontrollkästchen zu beschreiben ist. Ich würde lieber ein Paar Optionsfelder verwenden (z. B. "Do it the Foo way" und "Do not the bar way"), aber im Moment sind alle anderen Felder in meinem Formular datengebunden an ein Geschäftsobjekt. Ich möchte auch das Radiobutton-Paar an das Business-Objekt binden, aber ich habe noch keinen guten Weg gefunden, es zu tun. Ich kann eine der Schaltflächen an das Feld binden, so dass das Feld "True" festgelegt wird, wenn die Schaltfläche ausgewählt ist, während die Auswahl der anderen Schaltfläche die erste deaktiviert (dh die beiden Optionsfelder sind ordnungsgemäß verknüpft)), der Wert des Feldes wird nicht aktualisiert, um dies zu reflektieren.Wie verwende ich Datenbindung mit Windows Forms-Optionsfeldern?
Ich mag würde in der Lage sein
button1.DataBindings.Add(new Binding("checked", source, "useFoo"));
button2.DataBindings.Add(new Binding("checked", source, "!useFoo"));
zu sagen, aber ich bin mir ziemlich sicher, dass werfen, wenn es läuft. Gibt es einen einfacheren Weg, oder sollte ich nur darüber nachdenken, wie man ein einzelnes Kontrollkästchen anspricht? Ich möchte keine zusätzlichen Funktionen hinzufügen, um etwas mit diesem trivialen ...
ETA: Ein Kommentator hat vorgeschlagen, ein Dropdown (ComboBox) zu berücksichtigen. Ich hatte darüber nachgedacht, aber wie würde ich das an ein boolesches Feld in einer Datenbank/Eigenschaft in einem Geschäftsobjekt binden? Wenn ich das SelectedItem an die useFoo -Eigenschaft binden würde, was würde dann in der Items-Auflistung passieren? Muss ich nur "True" und "False" hinzufügen, oder könnte ich irgendwie ein Schlüssel/Wert-Paar-Objekt hinzufügen, das ein angezeigtes Objekt ("Use Foo"/"Do not Use Foo") an den booleschen Wert dahinter bindet? Ich habe Probleme, Dokumente zu diesem Thema zu finden.
Über die Antwort ein: die Lösung, die ich involviert das Business-Objekt mit Liquidation modifizieren - die Grundidee ist sehr ähnlich dem von Gurge geschrieben, aber ich kam mit ihm getrennt, bevor ich seine Antwort lesen. Kurz gesagt, ich habe eine separate Eigenschaft hinzugefügt, die einfach !useFoo
zurückgibt. Ein Optionsfeld ist an source.UseFoo
gebunden und das andere ist an source.UseBar
(der Name der neuen Eigenschaft) gebunden. Es ist wichtig, sicherzustellen, dass die neue Eigenschaft sowohl Getter als auch Setter hat, oder Sie werden mit wirklich merkwürdigem Verhalten enden.
Und vergessen Sie nicht, diese Änderung jedes Mal erneut vorzunehmen, wenn Sie Ihr DataSet bearbeiten! :-( – Mac