2014-02-02 2 views
1

У меня есть 2 таблицы Customer и Order Идентификатор клиента - это первичный ключ, и он имеет отношение ключа foriegn с ключом заказа. поэтому я хочу отображать клиентов в datagrid и orderd в RowDetailsTemplate, который состоит из другого datagrid.Как связать данные с entityframework с datagrid?

Ниже XAML

<Grid> 
     <DataGrid AutoGenerateColumns="True" Name="dataGrid1"> 
      <DataGrid.RowDetailsTemplate> 
       <DataTemplate> 
        <DataGrid ItemsSource="{Binding Order}" AutoGenerateColumns="True"/> 
       </DataTemplate> 
      </DataGrid.RowDetailsTemplate> 
     </DataGrid> 
    </Grid> 

В коде я написать следующий код

public MainWindow() 
    { 
     InitializeComponent(); 
     SampleDBEntities1 context = new SampleDBEntities1(); 
     dataGrid1.ItemsSource = context.Customers.ToList();   
    } 

Здесь я не могу связать внутреннюю DataGrid.

Ниже класс Context

public partial class SampleDBEntities1 : DbContext 
{ 
    public SampleDBEntities1() 
     : base("name=SampleDBEntities1") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

    public DbSet<Customer> Customers { get; set; } 
    public DbSet<Order> Orders { get; set; } 
} 

Ниже Entityframework генерируются классами для клиента и порядка

public partial class Customer 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string City { get; set; } 

    public virtual Order Order { get; set; } 
} 

public partial class Order 
{ 
    public int ID { get; set; } 
    public string Number { get; set; } 

    public virtual Customer Customer { get; set; } 
} 
+0

Я не вижу, чтобы вы привязывали View к ViewModel. Скажем, в конструкторе MainWindow добавьте эту строку - this.DataContext = new MyViewModel(). Вероятно, это будет то, что вы упускаете. –

+0

Сначала поставьте точку останова на «context.Customers.ToList()» и посмотрите, получаете ли вы значения или нет. Если вы получаете значения, используйте snoop и проверьте, почему ваши значения не загружаются внутри Datagrids. –

ответ

4

Вы должны сказать Entity Framework для нетерпеливых нагрузок заказов, в противном случае он не будет загрузить их ...

dataGrid1.ItemsSource = context.Customers.Include("Order").ToList(); 

Или

dataGrid1.ItemsSource = context.Customers.Include(c => c.Order).ToList(); 

(нужно добавить using System.Data.Entity;)

Он также должен работать, если удалили .ToList(), но это было бы заказы отложенной загрузки для каждого клиента, и вы бы в конечном итоге с Select (п + 1) проблема ,

+0

Это не работает – superuser

+0

Вы можете сохранить список в переменной? 'var customers = context.Customers.Include (c => c.Order) .ToList();' Затем добавьте точку останова и проверите клиентов, чтобы узнать, правильно ли оно заполнено? Благодарю. –

+0

, но я хочу, чтобы список заказов во внутренней сетке не во внешней сетке – superuser

Смежные вопросы