Привязка пользовательского списка свойств к DatagridView

У меня есть проблема, которую трудно объяснить. По сути, у меня есть список определенного класса, который мы можем назвать MyObj. Одним из свойств этого объекта является сам пользовательский список. Я хотел бы связать этот список с dataGridView и иметь это конкретное свойство, которое также отображается список. Есть идеи? Я достаточно ясен?:-П..

Вот идея. У меня есть свой собственный объект списка, переопределяющий метод ToString():

public class CategoriesList : List<Category>  
{  
  public override string ToString()
  {...}  
}

Это используется как свойство в объекте, таком как:

public MyObj  
{  
  public string Property1 {get; set; }  
  public string Property2 {get; set; }  
  public CategoriesList Categories {get; set; }  
} 

В свою очередь, у меня есть список таких объектов, как:

List<MyObj> myDataSouce = SomeRepository.GetMyObjList(); 

Где я связываю это с представлением сетки данных:

MyDataGridView.DataSource = myDataSource; 

Property1 и Property2 генерируются автоматически. Есть ли способ добавить свойство CategoriesList? Ранее я думал, что переопределение метода ToString() для класса будет достаточно..

Я действительно потерян на этом, поскольку я понятия не имею, как даже гуглить для этого:-P

2 ответа

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

Для первых:

По сути, украсьте свойство ваших категорий с помощью специального преобразователя типов:

[TypeConverter(typeof(MyConverter))] 
public CategoriesList Categories { get; set; }

Затем используйте пользовательский конвертер типов, который в основном сообщает сетке данных, что когда он встречает свойство категорий, что отображается:

public class MyConverter : TypeConverter
{

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        if (value is CategoriesList) {
            return value.ToString();
        }
        return base.ConvertFrom(context, culture, value);
    }
}

Вам нужно будет добавить свой столбец для привязки данных вручную, добавив несвязанный столбец и указав DataPropertyName для свойства, которое будет отображено в этом столбце, в данном случае "Категории"

Если вы хотите также отобразить свойства второго уровня, это может помочь: http://blogs.msdn.com/b/msdnts/archive/2007/01/19/how-to-bind-a-datagridview-column-to-a-second-level-property-of-a-data-source.aspx

Это может помочь... посмотрите на мой ответ там, я не пробовал его со свойством, которое также является типом списка, но я думаю, что идея та же самая.

Или этот, у меня также есть ответ с примером кода тоже...

Другие вопросы по тегам