2009-04-22 6 views
0

콤보와 DataGridView에 : 이제 Windows 응용 프로그램에 그리드 형 컨트롤의에 Params를 표시 할 수 있도록하려면나는 두 개의 클래스 만든

public class Params : List<Param> 
{ 

} 

public class Param 
{ 
    public enum enType 
    { 
     Integer, 
     Double, 
     String, 
     DateTime 
    } 

    private string sName_m; 
    public string Name 
    { 
     get { return sName_m; } 
     set { sName_m = value; } 
    } 

    private string sValue_m; 
    public string Value 
    { 
     get { return sValue_m; } 
     set { sValue_m = value; } 
    } 

    private enType eType_m; 
    public enType Type 
    { 
     get { return eType_m; } 
     set { eType_m = value; } 
    } 
} 

을, 그래서 난 내 양식에 DataGridView를 끌고하고, 다른 데이터 소스 -> 프로젝트 데이터 소스를 선택한 다음 내 매개 변수 클래스 (frmMain + Params)를 선택하여 데이터 소스를 선택했습니다.

이제 앱을 실행하면 레코드를 추가/삭제/편집 할 수 있고 그리드에는 3 개의 열이 표시됩니다. 내가 뭘 할 수 있도록하고 싶습니다 형식 열에 열거 내 선택 값을시키는 드롭 다운입니다. 현재 열거 형과 일치해야하는 문자열을 입력해야합니다. 가능한?

답변

1

자동 데이터 바인딩을 사용하여 DataGridViewComboBoxCell/DataGridViewComboBoxColumn을 올바르게 설정할 수 없었으므로 (CheckBox와 마찬가지로) AutoGenerateColumns를 false로 설정하고 열을 수동으로 설정했습니다.

+0

데이터 원본을 제거하고 수동으로 열을 설정했지만 DataGridView 컨트롤에 AutoGenerateColumns 속성이 표시되지 않습니다. – Jeremy

+0

디자이너에서 해당 속성을 사용할 수 없으므로 명시 적으로 코드를 지정해야합니다. 또한 데이터 소스를 제거 할 필요가 없습니다. 열을 인스턴스화 할 때 DataPropertyName 및 ValueType 속성을 설정하는 한 데이터 바인딩은 수동으로 설정된 열과 함께 계속 작동합니다. –

1

열의 자동 생성을 사용하지 않도록 설정하고 원하는 적절한 열을 수동으로 생성하거나 열을 제거하고 그 자리에 새 열을 추가 할 수 있습니다.

var columns = dataGridView1.Columns; 

var oldColumn = columns.Cast<DataGridViewColumn>() 
         .Single(c => c.DataPropertyName == "Type"); 
var index = columns.IndexOf(oldColumn); 

var newColumn = new DataGridViewComboBoxColumn(); 
newColumn.Name = "Type"; 
newColumn.DataSource = Enum.GetValues(typeof(Param.enType)); 
newColumn.ValueType = typeof(Param.enType); 

columns.RemoveAt(index); 
columns.Insert(index, newColumn); 
관련 문제