Привязать список классов в DataGridView - PullRequest
7 голосов
/ 10 ноября 2010

Мне нужно привязать List<MyClass> myList к DataGridView.И получите в таблице результатов с двумя столбцами ID и Имя.

Фрагменты кода:

private List<MyClass> myList = new List<MyClass>(){...};

public void BindClass()
{
    dataGridView.DataSource = myList;
}

public MyClass
{
   public MyDataClass Data{ get; set; }
}

public MyDataClass
{
   public string ID { get; set; }
   public string Name { get; set; }
}

Возможно ли это?

Ответы [ 4 ]

17 голосов
/ 10 ноября 2010

Как насчет привязки к анонимному типу:

public void BindClass() 
{
    dataGridView1.DataSource = myList.Select(myClass => new {myClass.Data.ID, myClass.Data.Name}).ToList();
}

Будете ли вы обновлять данные в представлении данных?

2 голосов
/ 10 ноября 2010

Для этого без изменения модели исключительно сложно (но возможно), требуя ICustomTypeDescriptor или TypeDescriptionProvider и пользовательский PropertyDescriptor Если честно: не стоит.

Просто добавьте сквозные свойства:

public MyClass
{
   public MyDataClass Data{get; set;}
   [DisplayName("ID")]
   public string DataID {
     get {return Data.ID;}
     set {Data.ID = value;}
   }
   [DisplayName("Name")]
   public string DataName {
     get {return Data.Name;}
     set {Data.Name = value;}
   }
}
1 голос
/ 30 декабря 2011

С LINQ все просто, как вы можете видеть в Этот ответ

Вот простая реализация того, что мне нужно было прикрепить к datagridview.

     DataGridView1.DataSource =  _
(From i In ItemList Select i.ListID, i.FullName, i.PurchaseDesc, i.EditSequence).ToList
0 голосов
/ 10 ноября 2010

Нет, вы не можете сделать это из коробки. Вам нужно будет написать собственный источник привязки (скорее всего, со специальной логикой для ваших конкретных целей), чтобы позволить «сверлить» глубже, чем 1 уровень свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...