DataGridView - установка отображаемого значения объекта в столбце - PullRequest
3 голосов
/ 24 февраля 2009

Я связываю некоторую коллекцию с DataGridView . Коллекция содержит KeyValuePair объекты, где ключ - это строка, а значение - это объект моего класса Поле . DataGridView отображает два столбца - один содержит ключ, а другой - значение. Значение ( Поле объект) отображается с его методом ToString (). Но я бы хотел, чтобы он отображался с использованием свойства Name. Проблема в том, что столбец не содержит DisplayMember свойство.
Как мне это сделать?

Редактировать: я знаю, что могу переопределить ToString (), чтобы вернуть имя объекта, но я не хочу этого делать.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2009

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

0 голосов
/ 25 февраля 2009

Вы можете перевести DataGridView в виртуальный режим (view.VirtualMode = true) и обработать события CellValueNeeded (и, возможно, CellValuePressed) для доступа к свойству «Имя». Это позволит избежать создания большого количества объектов-оболочек, но сделает код несколько менее элегантным.

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