我有一个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;