简体   繁体   中英

Retrive data from two tables and populate DataGrid Entity Framework

I am using Entity Framework. I have 2 tables in my database Customer and Invoice. The invoice Table has a column of CustomerID as foreign key to reference to the customer.
数据库中的表

I am using a DataGrid that has the following columns as shown in picture.

数据网格

This DataGrid should show data from Invoice Table and customer name from customer table. Please help me how to query this ?
DataGrid

<DataGrid IsReadOnly="False" Margin="0 10 0 0" Background="white" Name="InvoiceGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Invoice ID" IsReadOnly="True" MinWidth="100"/>
        <DataGridTextColumn Header="Date" IsReadOnly="True" MinWidth="100" />
        <DataGridTextColumn Header="Customer" IsReadOnly="True" MinWidth="250" />
        <DataGridTextColumn Header="Quantity" IsReadOnly="True" MinWidth="80" />
        <materialDesign:MaterialDataGridTextColumn IsReadOnly="True" Header="Total" MinWidth="150" />  

Context class

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

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

    public virtual DbSet<Category> Categories { get; set; }
    public virtual DbSet<Customer> Customers { get; set; }
    public virtual DbSet<Employee> Employees { get; set; }
    public virtual DbSet<Invoice> Invoices { get; set; }
    public virtual DbSet<InvoiceItem> InvoiceItems { get; set; }
    public virtual DbSet<Product> Products { get; set; }
    public virtual DbSet<Purchase> Purchases { get; set; }
    public virtual DbSet<Supplier> Suppliers { get; set; }
    public virtual DbSet<sysdiagram> sysdiagrams { get; set; }
}

If Customer is a navigation property of Invoice , you could load it using eager loading, eg:

var context = new Intelliventory_DBEntities();
InvoiceGrid.ItemsSource = context.Invoices.Include(x => x.Customer).ToList();
//...
context.Dispose();

You could then bind the column to the navigation property:

<DataGridTextColumn Header="Invoice ID" Binding="{Binding InvoiceID}" IsReadOnly="True" MinWidth="100"/>
<DataGridTextColumn Header="Date" Binding="{Binding Date}" IsReadOnly="True" MinWidth="100" />
<DataGridTextColumn Header="Customer" Binding="{Binding Customer.CustomerName}" IsReadOnly="True" MinWidth="250" />

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM