У меня есть графический интерфейс, который позволяет пользователю выбирать отчет для просмотра/редактирования. Когда пользователь выбирает отчет, он показывает элементы в отчете. У Item есть много свойств, большинство из которых привязываются должным образом. Одним из свойств является Owner, и оно привязано к ComboBoxColumn.
- Report
- Items
- Owner
- Items
Я делал что-то очень похожее на это несколько раз, и у меня не было проблем, когда я устанавливал DataPropertyName
, DataSource
, ValueMember
и DisplayMember
. Единственное отличие состоит в том, что на этот раз вместо типа Item
, имеющего OwnderID
, он фактически имеет экземпляр объекта Owner
.
В другом сообщении я видел предложение решить эту проблему, предоставив элементам, связанным в списке, свойство самоссылки, которое позволяет им возвращать себя для целей установки ValueMember
Однако, когда я связываю это следующим образом:
OwnerColumn.DataPropertyName = "Owner"
OwnerColumn.DataSource = ownersBindingSource1
OwnerColumn.ValueMember = "Self"
OwnerColumn.DisplayMember = "OwnerName"
Я получаю много ошибок, таких как:
Unable to cast object of type 'System.String' to type 'Owner'.
и:
The following exception occurred in the DataGridView:
System.ArgumentException: DataGridViewComboBoxCell value is not valid.
To replace this default dialog please handle the DataError event.
Я смог обойти некоторые из этих ошибок, связав их следующим образом:
OwnerColumn.DataPropertyName = "Owner"
OwnerColumn.DataSource = ownersBindingSource1
а также сделав функцию ToString
на дисплее Owner
свойством OwnerName
. Это кажется довольно хакерским, и я думаю, что неправильно понимаю что-то фундаментальное, поскольку оно все еще не работает должным образом. Любая помощь приветствуется.