Binding danych bezpośrednio z EF

0

Cześć

Próbuje wczytać do ComBoxa obiekty klas, jednak to co zrobiłam nie działa mi.
Oto kawałem XAML:

 
<ComboBox  ItemsSource="{Binding Imie}" 
                 DisplayMemberPath="Imie" 
                 SelectedValuePath="Imie"
                 Margin="0,0,0,5"/>

tak to wygląda od strony C#:

 DataContext = db.Pracownik;

A tak moja klasa pracownik (wygenerowana przez EF):

 
  
    public partial class Pracownik
    {
        public Pracownik()
        {
            this.Zamowienia1 = new HashSet<Zamowienia>();
        }
    
        public int ID { get; set; }
        public string Imie { get; set; }
        public string Nazwisko { get; set; }
        public Nullable<double> Pensja { get; set; }
        public string Mail { get; set; }
        public string Telefon { get; set; }
    
        public virtual ICollection<Zamowienia> Zamowienia1 { get; set; }
    }

Co zrobić, aby ComBox wyświetlał mi ładnie w liście np imię+nazwisko, a po wyborze konkretnej pozycji przez użytkownika wiedziała, który obiekt został wybrany?

Pomocy :)

0

db.Pracownik.Load();
DataContext = db.Pracownik.Local;

0

Niestety nie mam takiej metody jak
db.Pracownik.Load();
A samo poprawienie kodu na:
DataContext = db.Pracownik.Local;
nie przynosi efektów

0

Co znaczy nie masz? Pojawia sie jakis blad przy kompilacji?

0

To znaczy, że IntelliSense nie ma takiego czegoś w swoim zasobniku.

'System.Data.Entity.DbSet<Test.Pracownik>' does not contain a definition for 'Load' and no extension method 'Load' accepting a first argument of type 'System.Data.Entity.DbSet<Test.Pracownik>' could be found (are you missing a using directive or an assembly reference?)

0

Masz using System.Data.Entity; ?

0

Teraz już tak. Metoda load jest już w IntelliSense, lecz rozwiązanie nie skutkuje

0
<ComboBox  ItemsSource="{Binding}" 
                 DisplayMemberPath="Imie" 
                 SelectedValuePath="Imie"
                 Margin="0,0,0,5"/>
0

Super działa. A mógłbyś jeszcze wytłumaczyć co wykonują metody przez Ciebie polecane i co zrobić, aby po wyborze konkretnej pozycji na ComBoxsie wiedziała, który obiekt został wybrany

1

W ComboBoxie masz SelectedItem, który wskazuje co aktualnie jest wybrane
Load() ładuje dane z bazy danych, bo Ty wskazywałaś na niezaładowany obiekt, Local daje "lokalny" dostęp do bazy przez co operujesz tylko na tym co masz załadowane a nie są za każdym razem wykonywane zapytania do bazy danych. Ewentualnie zamiast tego może być DataContext = db.Pracownik.ToList();

0

Dziękuje :)
Tylko jeszcze jedno małe pytano odnośnie ComBoxa.
To jest zdarzenie wywoływane na SelectedItem
Co mam wpisać w miejsce x?

db.Klient.Remove( x );

Próbowałam (Klient)e ale kompilator jest innego zdania...

0
var klient = comboBox.SelectedItem as Klient;
if(klient!=null)
db.Klient.Remove(klient);

lub

db.Klient.Local.Remove(klient);

a potem

db.SaveChanges();

1 użytkowników online, w tym zalogowanych: 0, gości: 1