Привязка пользовательского списка свойств к 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