Laden...

Combobox an Tabelle binden mit FK

Letzter Beitrag vor 13 Jahren 5 Posts 1.763 Views
Combobox an Tabelle binden mit FK

Hi, ich such schon ne Weile im Netz nach diesem "Standardfall" doch leider bin ich wohl als Silverlightanfänger noch etwas zu blind.

Ich möchte gerne eine Combobox mit Einträgen aus einer Tabelle befüllen

Tabelle 1:
Key_Person ->int
Name_Person-> text

Angezeigt werden soll immer der Name der Person.

Welche Person jedoch angezeit werden soll wird durch einen ForeignKey in einer Tabelle 2 bestimmt

Tabelle 2:
...
Key_Person-> int (FK to Tabelle 1.KeyPerson)

Kann mir da einer auf die Sprünge helfen? danke!

Grüße
Diplomat

Hallo,

am einfachsten ist wohl wenn du die die Daten in eine Datenstruktur mappst.
z.B. in eine ObservableCollection<Person> (Die Person-klasse musst du dann selbst erstellen).

Diese kannst du an die ComboBox binden und anzeigen.
Über das CurrentItem der ObservableCollection (oder das selecteditem von der ComboBox) kriegst du dann das aktuelle Item raus.

Das mit der zweiten Tabelle habe ich irgendwie nicht gecheckt. Was möchtest du damit machen?

Gruß
Michael

Ich meinte ich will das Tabelle eins angezeigt wird in der Combobox.

Sowas a la
Name_Person | Key_Person
Person A 1
Person B 2
Person C 3

Dabei entsprich A dem Key 1, usw.

Wenn nun jemand in der Combobox eine Person auswählt, möchte ich quasi den dazu passenden Key als Wert in der Tabelle zwei speichern, da die Combobox Teil eines DataForms ist.

Hoffe das ist nun klarer?

Lös doch das ganze einfach mit einem Converter (IValueConverter) übder gib den FK und gib den Namen der Person zurück

Gruss
MusiuminCapitiss

Hallo,

jetzt hab ich es auch verstanden, danke 😃

Also du musst auf eine Änderung in der ComboBox reagieren und dann in deiner Tabelle den Wert reinschreiben.
Wenn du die ObservableCollection verwendest dann kannst du darüber mitbekommen wenn sich das CurrentItem ändert.

Hier mal ein Stück Beispielcode dazu


public class MainWindow
{
public MainWindow()
{
   Persons = new ObservableCollection<Person>();
   var a = CollectionViewSource.GetDefaultView(Person);
   a.CurrentItemChanged += (obj,e) =>
          {
               //Das Item hat sich geändert. Den Wert hinschreiben wo du willst
          }

   DataContext = this;
}


public ObservableCollection<Person> Persons{get;set;}
}


<ComboBox ItemsSource="{Binding Persons}" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name_Person" />

Keine Garantie => da nur hier schnell runtergeklopft

Wenn du mit der Tabelle2 ein einfaches WPF Control meinst dann kannst du es auch direkt mit DataBinding machen. Also {Binding Persons.CurrentItem}

Gruß
Michael