2014-04-24 2 views
0

int 열거 형을 받아들이도록하기 위해 datagridview combox box 열의 기본 동작을 재정의하려고했습니다.정수로 열거 형을 받아들이는 Datagridview 콤보 셀

public enum TestEnum 
{ 
    a = 1, 
    b = 2, 
    c = 3, 
} 

public class Test 
{ 
    public TestEnum test {get;set;} 
} 

public class Form1 
{ 
    public Form1 
    { 
     Datagridview dgv = new Datagridview(); 
     dgv.AutoGenerateColumns = false; 

     DatagridviewComboboxColumn col1 = new DatagridviewComboboxColumn(); 
     col1.CellTemplate = new CustomComboboxCell(); 

     //set datasource for col1 
     Dictionary<int, string> dct = new Dictionary<int, string>(); 
     dct.Add(1, "a"); 
     dct.Add(2, "b"); 
     dct.Add(3, "c"); 

     col1.Datasource = new BindingSource() {Datasource = dct}; 
     col1.ValueMember = "key"; 
     col1.DisplayMember = "value"; 
     col1.DataPropertyName = "test"; 

     dgv.Columns.Add(col1); 
     dgv.Invaidate(); 

     this.Constrols.Add(dgv); 

     //Add datasource for datagridview 
     List<Test> lst = new List<Test>(); 
     lst.Add(new Test() {test = TestEnum.a}); 
     lst.Add(new Test() {test = TestEnum.b}); 
     lst.Add(new Test() {test = TestEnum.c}); 

     dgv.Datasource = new BindingList() {Datasource = lst}; 
    } 
} 

나는 모든 것이 thoug 찾습니다

public class CustomComboboxEditingControl : DataGridViewComboboxEditingControl 
{ 
    public override object EditingControlFormattedValue 
    { 
     get 
     { 
      return base.EditingControlFormmatedValue; 
     } 
     set 
     { 
      if(value.GetType().IsEnum) 
      { 
       //convert enum to int 
       base.EditingControlFormattedValue = (int)value; 
      } 
      else 
      { 
       base.EditingControlFormattedValue = value; 
      } 
     } 
    } 
} 

public class CustomComboboxCell : DatagridviewComboboxCell 
{ 
    public override Type EditType 
    { 
     return typeof(CustomComboboxEditingControl); 
    } 
} 

그런 다음 내 양식에, 나는이 테스트를 위해 콤보 열이있는 DataGridView를 만들기 : 그렇게하기 위해, 나는 다음과 같이 CustomComboboxCellCustomComboboxEditingControl을 생성 완벽하지만, 양식을 실행하면 여전히 나에게 줄 것입니다.

제 코드를보고 놓친 부분을 알려주십시오.

답변

0

밤에 힘들어 마침내 나는 처음부터 원하지 않는 "추악한"해결 방법으로 문제를 해결합니다. 난 Dictionary<int, string>에서 Dictionary<TestEnum, string>으로 데이터 소스로 바꾼다.