C # Entity Framework 4.1 связывание базы данных с DataGridView - PullRequest
1 голос
/ 08 декабря 2011

У меня есть список объектов, сгенерированных первым кодом EF, доступ к которым осуществляется без проблем через контекст.

Одно свойство в рассматриваемом классе на самом деле является ссылкой на другой класс.

Когда я связываю это с сеткой данных, все столбцы отображаются нормально, за исключением ссылок, которые отображаются в виде строки "System.Data.Entity.DynamicProxies.Contact_43342 ..... long number".

Во-первыхто, что я действительно хотел бы здесь, это Имя контакта или другое описание, которое появится в этом столбце.

Во-вторых, я также хотел бы иметь возможность изменить имя описания столбца на более дружественное для человека.name, на данный момент все имена столбцов установлены на имена свойств класса.Было бы неплохо отредактировать столбцы заранее, возможно ли, если среди столбцов это можно сделать во время разработки?

Наконец, и, возможно, наиболее сложно, когда у меня есть объект, который ссылается на другие объекты (например,мой класс Invoice имеет свойство Contact в качестве внешнего ключа) Я также хотел бы иметь выпадающий список со списком объектов внешнего ключа, из которых я могу выбрать.Непосредственное редактирование с помощью столбца со списком в представлении данных было бы здорово, однако меня смущает то, как заполнить поле со списком именами контактов и, что более важно, как установить имя контакта для конкретной ссылки на объект после выбора (в конце концов, поле со списком отображает имена в виде строк, где объект 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;
...