2013-03-18 4 views
1

У меня есть список «Person» объекта:занесения в DataGridView

public class Person 
{ 
    public Int32 Id { get; set; } 
    public String Name { get; set; } 
    public Document oDocument { get; set; } 
} 

А также есть класс документа.

public class Document 
{ 
    public String Type { get; set; } 
    public String Code { get; set; } 
} 

мне нужно заполнить DataGridView с этим списком, показывая некоторые только два столбца: Имя (Person) и DocumentCode (документ)

Я использовал этот код, но я не получаю то, что я хочу.

dgvPersona.DataSource = list; 
+0

Добавить свой результат – KF2

ответ

2

Вы должны выбрать anonymous type объект (проецировать обязательные поля) и затем связать, что ваш GridView как:

var list = (from p in persons 
      select new 
        { 
        Name = p.Name, 
        DocumentCode = p.Document.Code 
        }).ToList(); 

dgvPersona.DataSource = list; 

Вы можете выбрать Id, а также и держать его в скрытый столбец в вашем gridview, чтобы позже вы могли использовать его для обновления записи и т. д.

+0

спасибо за повтор. И что, если хотите изменить имя столбца. – Flezcano

+1

@Flezcano, поскольку вы проецировали анонимный тип, вы также можете изменить имя столбца в инструкции select, или вы можете просто изменить заголовок столбца Grid и присвоить ему новое имя при разработке или времени выполнения * (в вашем коде) * like 'grid.Columns [0] .HeaderText =" Some Name ";' – Habib

1

попробуйте следующее:

public class Person 
     { 
      public Int32 Id { get; set; } 
      public String Name { get; set; } 
      public Document oDocument { get; set; } 
     } 
     public class Document 
     { 
      public String Type { get; set; } 
      public String Code { get; set; } 
     } 

    List<Person> list = new List<Person>(); 
    dgvPersona.DataSource= list.Select(data => new { data.Name, data.oDocument.Code }).ToList(); 
Смежные вопросы