2011-09-02 6 views
4

DataGridview에 포함 된 DataGridviewComBobox (드롭 다운 메뉴) 컨트롤에서 새 값을 선택할 때 예외가 발생합니다. 콤보 상자는 내 클래스의 인스턴스로 채워지는 BindingSource로 채워집니다. 메뉴에 옵션을 올바르게 표시 할 수 있지만 포커스를 새 컨트롤로 변경하면 예외가 발생합니다. System.String에서 myclass 로의 잘못된 캐스트가 발생합니다. 스택 추적 (임은 그 단어 권리를 사용하는 경우) 죄송합니다 (소스가C# Winforms DatagridviewCombobox 예외 문자열을 클래스로 변환 할 수 없습니다.

System.Windows.Forms.DataGridView.PushFormattedValue 이 System.Convert.DefaultToType 더 명시 적 설명은 다음과 같습니다

에 아래로 계단식 된 표시 너무 길지만 재현 가능하게 만들고 싶었습니다.) : 아무 속성도없는 점유 클래스라는 비어있는 클래스가 있습니다. (Occupant에도 Name 속성이 있기 때문에 문제가 있습니다.) OccupantSource라는 BindingSource가 있는데, DataSource가 Occupant를 가리키고 있습니다.

또한 Driver라는 하나의 Occupant 속성이있는 Car라는 클래스가 있습니다.

내 Form_Load()에서 OccupantSource.AddNew()를 두 번 호출하고 CarSource.AddNew()를 한 번 호출합니다.

DataSource (CarSource로 구성된 BindingSource)의 DataSource 인 DataGridView 컨트롤이 있습니다. DGV에는 CarSource에서 자동차의 Driver 속성을 표시하는 하나의 열이 있습니다. DataPropertyName이 driver로 설정된 DataGridViewComboBoxColumn입니다.

그래서 내가 원하는 것은 Datagridview에서 자동차 행을 표시하는 것입니다. 열 중 하나가 콤보 상자가되어 드롭 다운을 선택하고 기존의 Occupant 인스턴스에서 드라이버를 선택할 수 있습니다. 그러나 나는 예외를 얻는다.

내가 오해 한 것입니까? 클래스의 인스턴스를 사용하여 DataGridViewComboBox를 채울 수 있습니까?

+0

선택한 항목이 될 수 있습니다/현재 항목이 콤보 박스에서 표시되지만 개체가 내부적으로 문자열 일 수 있습니다. 초점을 맞추지 못하면 내부적으로 변환하려고하는 커밋 이벤트가 호출됩니다. – Zenwalker

+0

귀하가받는 Exception.Message 란 무엇입니까? – MoonKnight

+0

CarSource라는 BindingSource가 있고 DGV의 ComboBoxBolumn의 데이터 소스가 OccupantSource로 설정되었습니다. 프로젝트에 문자열이 없으며 예외 메시지는 다음과 같습니다. http://img508.imageshack.us/img508/2586/unledbfv.jpg – Moz

답변

5

정확히 동일한 문제가 발생하여 해결하기 위해 몇 시간 동안 google-fu를 사용하여 머리를 긁적 거리고있었습니다. 이 링크는 나에게 마침내 나에게 좋은 설명을 주었다. http://www.pcreview.co.uk/forums/datagridview-combobox-column-error-listing-objects-t2344961.html

내가 수정 한 방법은 DisplayMember를 변경하는 것이 었습니다. 'this'를 반환 한 클래스에서 'Self'에 대한 참조를 사용했습니다. DisplayMember의 속성 인 ToString() 뿐이라고 생각한 DisplayMember와 ValueMember에이 속성을 사용하고있었습니다.

설명을 읽었을 때 DisplayMember 및 ValueMember가 전혀 설정되지 않았을 수 있습니다. 이 경우 올바르게 설정해보십시오 (디스플레이 멤버에게 'this'에 대한 참조를 사용하지 마십시오!). 그러면 수정 될 수 있습니다.

+0

감사합니다! 내가 찾은 것보다 더 나은 설명이있어. –