2013-04-29 2 views
2

DataGridViewComboBoxColumn에 클래스 개체 목록을 채우려고합니다 (ToString 오버로드). 이 방법은 일반 콤보 상자에서 완벽하게 작동합니다. 그러나 일단 DataGridViewComboBoxColumndataGridView에로드하면 DataGrid에서 클릭 할 때마다 오류가 발생합니다.DataGridViewComboBoxColumn을 사용하여 클래스 개체 목록을 표시 할 수 있습니까?

다음은 오류입니다.

DataTable dt = new DataTable(); 

List<mclass> MObjects = new List<mclass>(); 

DataGridViewComboBoxColumn objcolumn = new DataGridViewComboBoxColumn(); 

objcolumn.DataSource = MObjects; 

objcolumn.ValueType = typeof(mclass); 

dataGridView1.DataSource = dt; 

dataGridView1.Columns.Add(objcolumn); 

지금 오류 메시지 사이에, 열이 잘 작동 :

The Following Exception Occurred in the DataGridView: 
System.ArgumentException: DataGridViewComboBoxCell value is not valid. 
To replace this default dialog please handle the DataError event. 

는 그리고이 오류 대화 상자 이전에 실행되는 코드입니다. 리스트에서 오브젝트를 완벽하게 선택할 수 있습니다. 이 오류를 어떻게 해결하고 작동하는 콤보 열을 그대로 두십시오. 내가 놓친 게 있니? 아니면 그 오류 메시지를 제거하는 방법을 찾아야합니까?

dt.Columns.Add("OBJList", typeof(mclass)); 

그러나이 만들고, 더 이상 (I 요청에, 그것의 대부분을 사용할 수 생략했다) 같은 예외 :

The following exception occurred in the DataGridView: 
System.FormatException: Invalid cast from 'System.String' to 'Namespace.mobject'. --->  
    System.InvalidCastException: Invalid cast from 'System.String' to 'Namespace.mobject'. 
+0

문제는 DropDown 인 ComboBoxStyle이 원인 일 수 있습니다. 즉, 텍스트가 편집 가능하다는 의미입니다. 텍스트를 편집 할 수 없음을 의미하는 스타일을 DropDownList로 변경해보십시오. – Mike

+0

텍스트는 현재 편집 할 수 없습니다. 나는 당신이 기본적으로 제안한 것처럼 그것을 믿습니다. –

+0

Curiouser와 Curiouser. 분명히 이것은 모든 데이터 유형, 심지어 문자열에 대한 ComboBoxColumn의 일반적인 문제입니다. –

답변

0

나는 몇 가지 조사 후이 줄을 추가하는 시도 귀하의 ValueTypestring이어야합니다. typeof 부분은 값을 추출하는 방법이어야합니다 (아마도 ToString() 안에 있음).

+1

이것에 대해 자세히 설명해 주시겠습니까? mclass 클래스에 문자열을 반환하는 메서드를 만들어야합니까? 그런 다음 type = this 메서드를 사용합니까? –

관련 문제