C # Winforms DatagridviewCombobox исключение Строка не может быть преобразована в класс - PullRequest
5 голосов
/ 02 сентября 2011

Возникает исключение при выборе нового значения в элементе управления списком данных (выпадающее меню), встроенном в представление данных.Поле со списком заполнено BindingSource, который заполнен экземплярами моего класса.Я могу правильно отобразить параметры в меню и выбрать один, но изменение фокуса на новый элемент управления (я предполагаю, что оно фиксирует изменение) вызывает исключение: Invalid Cast из System.String в myclass.Трассировка стека (если я использую это слово справа) показывает, что источник был

System.Windows.Forms.DataGridView.PushFormattedValue, каскадно переходящий к System.Convert.DefaultToType

Более подробное объяснение приведено ниже(извините, это так долго, но я хотел сделать его воспроизводимым):

У меня есть пустой класс с именем Occupant, без свойств (проблема существует, когда Occupant также имеет строковое свойство Name, так что это не так).У меня есть BindingSource с именем OccupantSource, а его DataSource указывает на Occupant.

У меня также есть класс с именем Car, с одним свойством Occupant с именем Driver.

В моем Form_Load () я дважды вызываю OccupantSource.AddNew () и вызываю CarSource.AddNew () один раз.

У меня есть элемент управления DataGridView, DataSource которого является CarSource (BindingSource состоит изАвто).DGV имеет один столбец, отображающий свойство Driver автомобилей в CarSource.Это DataGridViewComboBoxColumn с DataPropertyName, установленным в драйвер.

Итак, я хочу показать ряды машин в Datagridview, с одним из столбцов, представляющим собой выпадающий список, который я могу раскрыть и выбрать драйвер из существующих экземпляровЖитель.Но я получаю исключение.

Это то, что я неправильно понимаю?Разве вы не можете использовать экземпляры класса для заполнения DataGridViewComboBox?

1 Ответ

5 голосов
/ 02 ноября 2011

Я столкнулся с точно такой же проблемой и чесал голову, часами пытаясь ее решить, используя гугл-фу.Эта ссылка помогла мне, наконец, дал мне хорошее объяснение.http://www.pcreview.co.uk/forums/datagridview-combobox-column-error-listing-objects-t2344961.html

То, как я это исправил, состояло в том, чтобы изменить DisplayMember.У меня была ссылка на «Self» в классе, который возвратил «this» - я использовал это как для DisplayMember, так и для ValueMember, думая, что это просто ToString () свойство из DisplayMember.

Читая ваше объяснение, выможет вообще не иметь DisplayMember и ValueMember?Если это так, попробуйте установить их правильно (и не используйте ссылку «this» для отображаемого элемента!), И это может исправить это.

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