Однако DataGridViewComboBoxColumn не работает так, хотя он будет отображать значение ToString, если вы не установите DisplayMember, что-то внутренне пойдет не так, когда он пытается найти SelectedItem, вы должны установить DisplayMember в открытое свойство твой класс. Хуже того, поведение по умолчанию, если вы не установите свойство ValueMember, должно возвращать DisplayMember, нет способа получить сам фактический элемент. Единственный обходной путь - добавить свойство к вашему классу, которое возвращает себя, и установить это свойство в ValueMember. Конечно, если ваш элемент не является чем-то, что вы можете изменить (например, один из классов платформы), вам придется собирать вместе контейнерный объект, который содержит ссылку на ваш элемент.

аюсь связатьDataGridViewComboBoxColumn к экземпляру Foo, но когда я установил значение в сетке, я получилArgumentException говорит мне, что я не могу конвертировать из String в Foo.

var data = (from item in someTable
            select new { Foo = item.foo, Bar = item.Bar }).ToList();
grid.DataSource = data;
column.DataPropertyName = "Foo";
column.DataSource = (from foo in Foo select foo).ToList (); //foo is an instance of Foo
column.DisplayMember = "SomeNameField"; //Foo.SomeNameField contains a description of the instance

Я что-то пропустил? Можно ли привязать данные к сложному объекту?

ОБНОВИТЬ:

Я реализовал TypeConverter и переопределил CanConvertFrom, CanConvertTo, ConvertTo, ConvertFrom. Теперь я получаю

FormatException: значение DataGridViewComboBoxCell недопустимо

Есть идеи?

Ответы на вопрос(4)

Ваш ответ на вопрос