C#Entity Framework 4.1 dbset绑定到DataGridView

时间:2011-12-07 22:23:42

标签: c# entity-framework data-binding entity-framework-4.1

我有一个EF代码优先生成的对象列表,通过上下文可以正常访问。

该课程中的一个属性实际上是对另一个类的引用。

当我将它绑定到datagridview时,所有列都显示正常,但引用除外,它们以字符串“System.Data.Entity.DynamicProxies.Contact_43342 ..... long number”形式出现。

首先,我真正想要的是联系人姓名或本专栏中的其他说明。

其次,我还希望能够将列描述的名称更改为更友好的名称,目前所有列名都设置为类属性名称。如果可以在设计时完成列,那么可以提前编辑列吗?

最后,也许是最复杂的,当我有一个引用其他对象的对象(例如我的Invoice类有一个Contact属性作为外键)时,我还希望有一个带有外键列表的下拉组合框我可以选择的对象。使用datagridview中的组合框列进行直接编辑会很棒,但是我对如何使用联系人名称填充组合框感到困惑,更重要的是如何在选择完成后将联系人名称设置为特定对象引用(毕竟,组合框将名称显示为字符串,其中Invoice对象需要对实际实例化类的引用。)

关于如何实现上述目标的任何想法?

代码在帖子的末尾。

public class Invoice
{
    public Guid InvoiceID { get; set; }
    public DateTime? DueDate { get; set; }
    public virtual Contact Contact { get; set; }
}

public class Contact
{
    public Guid ContactID { get; set; }
    public string FirstName { get; set; }   
    public string LastName { get; set; }
    public string EmailAddress { get; set; }

    public virtual ICollection<Invoice> Invoices { get; set; } // lazy loading with virtual

    public Contact()
    {
      Invoices = new List<Invoice>();
    }
}

public class ModelContext : DbContext
{
    public DbSet<Contact> Contacts { get; set; }
    public DbSet<Invoice> Invoices { get; set; }
}

// and in the main form function after loading the context i bind the data to the grid view as follows:
this.dataGridView1.DataSource = this.modelContext.Invoices.Local;

0 个答案:

没有答案