C# Winforms DatagridviewCombobox исключение Строка не может быть преобразована в класс
Возникает исключение при выборе нового значения в элементе управления списком данных (выпадающее меню), встроенном в представление данных. Поле со списком заполнено 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, чьим источником данных является CarSource (BindingSource состоит из автомобилей). DGV имеет один столбец, отображающий свойство Driver автомобилей в CarSource. Это DataGridViewComboBoxColumn с DataPropertyName, установленным в драйвер.
Итак, я хочу показать ряды автомобилей в Datagridview, с одним из столбцов, представляющих собой выпадающий список, который я могу раскрыть и выбрать драйвер из существующих экземпляров Occupant. Но я получаю исключение.
Я что-то недопонимаю? Не можете ли вы использовать экземпляры класса для заполнения DataGridViewComboBox?
1 ответ
Я столкнулся с точно такой же проблемой и чесал голову, часами пытаясь ее решить, используя гугл-фу. Эта ссылка помогла мне, наконец, дал мне хорошее объяснение. http://www.pcreview.co.uk/forums/datagridview-combobox-column-error-listing-objects-t2344961.html
Я исправил это, изменив DisplayMember. У меня была ссылка на "Self" в классе, который возвратил "this" - я использовал это как для DisplayMember, так и для ValueMember, полагая, что это просто ToString() свойство из DisplayMember.
Читая ваше объяснение, возможно, у вас вообще не установлены DisplayMember и ValueMember? Если это так, попробуйте установить их правильно (и не используйте ссылку на 'this' для отображаемого элемента!), И это может исправить это.