DataGridView - установка отображаемого значения объекта в столбце
Я привязываю некоторую коллекцию к DataGridView . Коллекция содержит объекты KeyValuePair, где ключ - это строка, а значение - это объект моего класса Field . DataGridView отображает два столбца: один содержит ключ, а другой - значение. Значение ( объект поля ) отображается с помощью его метода ToString (). Но я бы хотел, чтобы он отображался с помощью свойства Name. Проблема в том, что столбец не содержит свойства DisplayMember .
Как я могу это сделать?
Изменить: я знаю, что могу переопределить ToString (), чтобы вернуть имя объекта, но я не хочу этого делать.
Ответов (2)2
DataGridView
(как и большинство прямых привязок на основе списков) может привязываться только к непосредственным свойствам элемента строки. Возможно, вы могли бы создать для этого фасадный объект? т.е. класс, который принимает экземпляр и возвращает имя как прямое свойство:
public string Name {
get {return innerObject.Name;}
set {innerObject.Name = value;}
}
// snipped: other properties - Key etc
В качестве альтернативы вы могли бы спроецировать в новый объект? Например, привязки данных хорошо работают (по крайней мере, только для чтения) с анонимными типами:
grid.DataSource = originalData.Select(x=>
new {x.Key, Name = x.Field.Name}).ToList();
Наконец, вы можете взломать, ComponentModel
чтобы выровнять модель во время выполнения, но на самом деле это того не стоит.