Laden...

Elemente von DataSet in ComboBox darstellen und löschen, wenn sie ausgewählt wurden

Erstellt von simonfritz vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.643 Views
S
simonfritz Themenstarter:in
26 Beiträge seit 2016
vor 7 Jahren
Elemente von DataSet in ComboBox darstellen und löschen, wenn sie ausgewählt wurden

Hallo Ihr Lieben,

ich möchte gerne Elemente eines Datasets in einer ComboBox darstellen und ausgewählte Elemente löschen sobald diese ausgewählt wurden.

  • User wählt Element aus Liste aus
  • Klickt auf "bestätigen"
  • Element verschwindet aus DropDownListe und erscheint in 2. DropDownliste

Soweit kein Problem!

Was ich nun aber machen möchte, ist dass ich beim Löschen aus der 2. Dropdownliste das Element wieder zurück in die erste Liste bekommen möchte.

Wie mache ich das am einfachsten?

Anbei der Auszug wie ich das Dataset der ComboBox zuweise. In diesem Fall als DataView da ich nur eine bestimmte Zeile der Tabelle haben möchte.


DataView dv = dataSet.Tables[3].AsDataView();

dv.RowFilter = "isValueChangeable=true";

comboBox.DataSource = dv;
comboBox.DisplayMember = "name";

Falls etwas nicht ausreichend erklärt wurde, freue ich mich auf Rückfragen!

T
314 Beiträge seit 2013
vor 7 Jahren

Genauso wie du sie von Liste 1 in Liste 2 bekommst, bekommst du sie auch wieder von 2 nach 1. Oder wo genau liegt dein Problem?

S
simonfritz Themenstarter:in
26 Beiträge seit 2016
vor 7 Jahren

Ich möchte gerne Elemente die ich in Liste 2 aufführe in Liste 1 ausblenden. Wenn ich sie in Liste 2 wieder lösche sollen Sie in Liste 1 wieder auftauchen.

2.080 Beiträge seit 2012
vor 7 Jahren

Mach es doch (wie t0ms3n schon sagt) genauso wie vorher auch.
Du schiebst das Objekt ja schon von Liste 1 in Liste 2, genauso schiebst Du es auch zurück

Ansonsten bin ich ja ein Fan vom MVVM-Pattern.
Dort könnte (sollte) man für alle Daten-Objekte, die angezeigt werden, ein ViewModel haben. Für jedes Item gibt es dann ein ViewModel-Objekt mit z.B. einer Deleted-Property.
Danach kannst Du dann filtern und entsprechend anzeigen, damit musst Du dann auch nicht zwischen Listen hin und her schieben. Beim SPeichern könnte das Löschen dann entsprechend in die Tat umgesetzt werden, eine Zurücksetzen-Funktion wäre dann auch kein Problem.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

S
simonfritz Themenstarter:in
26 Beiträge seit 2016
vor 7 Jahren

Das mit der zusätzlichen Eigenschaft klingt gut. Wie füge ich eine solche Property am sinnvollsten hinzu?

bin noch recht neu auf dem Gebiet^^

3.003 Beiträge seit 2006
vor 7 Jahren

MVVM wird in deinem WinForms-Szenario schwierig sauber aufzuziehen sein. Du kannst ein Proxy-Objekt benutzen, um zusätzliche Eigenschaften an die Ursprungsobjekte zu pappen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

2.080 Beiträge seit 2012
vor 7 Jahren

Ja, MVVM ist unter WinForms nicht so schön wie unter WPF, aber meiner Meinung nach immer noch schöner, als alles direkt im CodeBehind zu machen - auch wenn der Aufwand dafür höher wird.
Hab das in einem aktuellen WinForms-Projekt auch so gemacht und bin recht zufrieden damit - ich hab also nicht nur die WPF-Sicht ^^

bin noch recht neu auf dem Gebiet^^

Dann solltest Du dir ich am besten erst einmal die Grundlagen aneignen.
Wenn Du die nicht kennst, hat das hier keinen Sinn. Wir können dir ja nicht alles erklären, dafür haben sich kluge Leute lange hin gesetzt und Bücher geschrieben 😉

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

3.003 Beiträge seit 2006
vor 7 Jahren

MVC/MVP ist bei WinForms wesentlich besser geeignet. Das ist aber eine Mülleimer-Diskussion, weil, wenn ich nicht völlig auf dem Holzweg bin, der TE eine XML-Datei in ein DataSet klopft und also gar nicht wirklich mit Objekten arbeitet. Selbst die Sache mit dem Proxyobjekt geht so nicht wirklich gut. Insofern ist wahrscheinlich toms3n am nahesten an einer praktikablen Lösung, i.e., Datenquelle von Hand anpassen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

S
simonfritz Themenstarter:in
26 Beiträge seit 2016
vor 7 Jahren

ok werd ich mir mal anschauen danke!! =)

5.299 Beiträge seit 2008
vor 7 Jahren

ich würde da kein großen Overhead für vom Zaun brechen.
Zumal höchst unterschiedliche Meinungen bestehen, was MVC/MVP nu eiglich im einzelnen ist, und wann mans falsch gemacht hat.
"Mal anschauen" ist sicher wunnebar, aber glaub fraglich, ob "mal anschauen" reicht, ums auch richtig umzusetzen, und dann, ob das auch tatsächlich was hilft.

Also ich würde einfach den beiden Combos je eine BindingSource geben, und an diesen BSs die Filter so setzen, dass es so anzeigt, wie gewünscht.

Man sollte halt bei Databinding nicht ständig mit dem new - Schlüsselwort rumfuchteln, denn das erstellt immer neue Objekte, und dann kann man die Bindings alle wieder neu konfigurieren.

Wenns um viele Datensätze geht, würde ich LinqToDataset einsetzen, weil Bs.Filter-Ausdrücke können da evtl. bischen lang werden.

Die Anforderung ist mir auch noch nicht klar: Zeigt Combo2 genau das an, was Combo1 "abwählt" und umgekehrt?
Oder evtl. noch zusätzliche "eigene" Datensätze?

Der frühe Apfel fängt den Wurm.