Laden...

WPF Combobox DataBinding Problem

Erstellt von bert21 vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.290 Views
B
bert21 Themenstarter:in
24 Beiträge seit 2010
vor 13 Jahren
WPF Combobox DataBinding Problem

Hallo ...

Ich stelle grad ein Projekt auf WPF um und komme mit dem databinding einer Combobox nicht weiter:

Ich habe eine Tabelle mit Kunden (KundeId, Name, GruppeId, ...)
Und eine Tabelle mit den Gruppen (GruppeId, GruppeName, ...)

Nun soll bei Kunde / bearbeiten eine Combobox zum Auswählen der Gruppe angezeigt werden. In der Combobox soll der Gruppenname stehen; in der Tabelle Kunde wird dann die GruppeID gespeichert.

Beide Tabellen hole ich aus Access in eine DataTable

dt.Kunde
dt.KundeGruppe

In WPF binde ich den gesammten Grid an einen DataRowView der Tabelle Kunde; die einzelnen Felder dann an die Spalten:

<Grid ItemSource="{Binding}">
  <TextBox Name="KundeId" Content="{Binding KundeId"}
  <ComboBox Name="cbKundeGruppe">

Die Bindung der Combobox habe ich dann im Code vorgenommen. Wenn ich nun die Combobox binde, zeigt die mir zwar die Daten der Tabelle KundeGruppe an; nicht aber den zugeordneten Wert der Tabelle Kunde:

cbKundeGruppe.ItemsSource = dtKundeGruppe.DefaultView;
cbKundeGruppe.DisplayMemberPath = "GruppeName";
cbKundeGruppe.SelectedValuePath = "GruppeId";

cbKundeGruppe.SelectedItem = "{Binding GruppeId}";

Was ist denn daran falsch?

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo bert21,

du bist im falschen "Foren-Abteil". Das gehört nicht zu den Datentechnologien, sondern zu GUI: WPF und Silverlight.

Ohne mir den Code weiter anzusehen, sind da schon zwei Fehler: 1.) <TextBox Name="KundeId" Content="{Binding KundeId""}. Nach KundeId kommen zwei Anführungsstriche. Die müssen weg. 2.) cbKundeGruppe.SelectedItem = "{Binding GruppeId}";. _SelectedItem _erwartet eine Instanz. Du kannst dort kein Binding verwenden. _SelectedItem _dient dazu, an einem selektiertes Item zu binden oder es zu wählen.

Bindings im Code sind immer schlecht! Davon kann ich nur abraten.

Tipp: Alle Ausgaben an Fehlern von WPF findest du im Output-Fenster von Visual Studio.

zero_x

B
bert21 Themenstarter:in
24 Beiträge seit 2010
vor 13 Jahren

Wieso sind denn Bindings im Code schlecht?

5.742 Beiträge seit 2007
vor 13 Jahren

Wieso sind denn Bindings im Code schlecht?

Naja - sagen wir lieber "nicht wirklich sinnvoll".

Eine der Philosophien, die hinter der WPF steht, ist ja, Design und Logik voneinander zu trennen. Das Design soll komplett in XAML formuliert sein, während die Logik komplett in C# geschrieben sein soll.
Und zum Design zählen nun einmal alle Controls - deine Combobox erzeugst du ja auch in XAML. Initialisiertst du sie nun jedoch in C#-Code, ist das eher inkonsequent; du vermischt zwei Techniken und verteilst das Anliegen, eine Combobox mit z.B. allen Kunden anzeigen zu wollen (Design) auf zwei verschiedene Codedateien.
Wenn du da noch die Übersicht behalten kannst - gut. Aber im Normalfall setzt man auch Properties wie SelectedItem etc. in XAML.

Und in deinem Beispiel ist das ja auch ohne weiteres möglich.

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

das sieht eigentlich ganz gut aus, bis darauf halt das es wie schon genannt im Code statt direkt im XAML definiert ist.

Folgende Zeile ist nicht richtig:

cbKundeGruppe.SelectedItem = "{Binding GruppeId}"; 

Bindings sind so im Code nicht möglich. Schau dir einfach in der Doku zu den Bindings an wei man die im Code verwendet. Dann musst du aber nicht SelectedItem verwenden (das ist ja die Zeile aus der DataView, sprich ne DataRowView) sondern SelectedValue. Das gibt dir die ID zurück. Ansonsten ist das Vorgehen, also binden an die GruppenId schon korrekt so.

Du kannst dort kein Binding verwenden. _SelectedItem _dient dazu, an einem selektiertes Item zu binden oder es zu wählen.

Das liest sich so nicht ganz richtig. Die Art wie das Binding erstellt werden sollte ist natürlich falsch. Aber der Gedanke dahinter ist vollkommen richtig wenn man ne ComboBox zur Selektion aus einem Wertebereich benutzen möchte.

Baka wa shinanakya naoranai.

Mein XING Profil.

5.299 Beiträge seit 2008
vor 13 Jahren

geht das?

<Grid ItemSource="{Binding}">  

Der frühe Apfel fängt den Wurm.

6.862 Beiträge seit 2003
vor 13 Jahren

Seh ich jetzt auch erst, ist natürlich Mist weil das Grid kein ItemsControl ist.

Baka wa shinanakya naoranai.

Mein XING Profil.

B
bert21 Themenstarter:in
24 Beiträge seit 2010
vor 13 Jahren

kann mir denn jemand mal die 3 Zeilen als Code schreiben?

Tabelle dtKunde
Tabelle dtKundeGruppe

so an die Combobox binden, dass die Items aus der Tabelle dtKundeGruppe kommen und das selektierte aus einer DataRow der Tabelle dtKunde ... ???

Hinweis von talla vor 13 Jahren

Nein kann keiner. Beachte unsere Postingregeln: [Hinweis] Wie poste ich richtig? Besonders die Punkte 4a,4b,4c