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?
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
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.
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.
geht das?
<Grid ItemSource="{Binding}">
Der frühe Apfel fängt den Wurm.
Seh ich jetzt auch erst, ist natürlich Mist weil das Grid kein ItemsControl ist.
Baka wa shinanakya naoranai.
Mein XING Profil.
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 ... ???
Nein kann keiner. Beachte unsere Postingregeln: [Hinweis] Wie poste ich richtig? Besonders die Punkte 4a,4b,4c