Привязка пользовательского списка свойств к DatagridView - PullRequest
4 голосов
/ 07 апреля 2011

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

Вот идея. У меня есть свой собственный объект списка, переопределяющий метод 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 () для класса будет достаточно ..

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

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Предполагая, что вы хотите отобразить определенное значение вместо списка в сетке данных, вы захотите использовать пользовательский 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

0 голосов
/ 23 октября 2014

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

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

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