2011-10-31 2 views
4

나는이 단순하지만 나는 약 1/2 하루 인터넷 검색 및 다양한 것들을 시도 썼는데 확신합니다.# datagridview 콤보 상자 열 datasouce 목록/사전/datatable

나는 데이터 테이블을 가지고 있는데, 한 컬럼은 다른 데이터베이스 테이블에 대한 정수 ID 외래 키입니다.

나는 datagridview를 가지고 있으며 사용자가 값을 변경할 수 있도록하기 위해 콤보 상자 열을 사용하고 싶습니다. 그러나 정수를 사용하는 대신 이름을 사용하는 것이 좋습니다.

공용 멤버 int ID 및 string Name을 사용하여 간단한 구조체를 만들려고했습니다. 사전과 enums (하지만 컴파일 타임에 알려지지 않은 값들)을 들여다 보았다.

콤보 상자에 구조체 값을 채울 수 있지만 선택한 항목/인덱스를 프로그래밍 방식으로 설정할 수 없습니다.

gridview datasource's fk ID's 
1 
2 
3 

Foreign Key table: 

ID Name 
1 Name 1 
2 Name 2 
3 Name 3 

Datagridviewcombobox 열 : ID "5"는 데이터 테이블에있는 경우 즉, 그래서 내가 꿔 명확하게하기 위해

(5)의 ID를 가지고있는 구조체에 항목을 선택 콤보 상자를 설정 3 개의 항목이로드되어야합니다. "이름 1, 이름 2, 이름 3"으로 표시되어야합니다. gridview 데이터 소스의 FK id에 따라 각 항목에 대해 선택된 항목이 일치해야합니다.

도움 말?

앤드류

답변

9

당신은 DataGridViewComboBoxColumn.DataSource 속성을 설정하고 ComboBox에 표시되는 내용을 결정하기 위해 ValueMemberDisplayMember 속성을 사용할 수 있습니다. 가장 쉬운 방법은 DataTable에 FK 값을로드하고이를 데이터 소스로 사용하는 것입니다. 귀하의 예를 들면 다음과 같습니다

// assuming your DataGridViewComboBox column is fkCol 
// and your fk values are in a DataTable called fkTable 
fkCol.DataSource = fkTable; 
fkCol.ValueMember = "ID"; 
fkCol.DisplayMember = "Name"; 

난 당신이 DataGridView 초기 DataTable에 결합하는 방법을 잘 모르겠지만, 당신은 DataPropertyName를 사용하여 원래 DataTable의 특정 컬럼과 DataGridViewComboBox 열을 연결할 수 있습니다

fkCol.DataPropertyName = "ColumnName"; 
+0

감사합니다. heas! 1 일 2 시간의 검색과 필요한 모든 2 줄의 코드가 필요했습니다. - DOH! 이것은 작동 중입니다. – andrew

0
DataAccessLayer dal = new DataAccessLayer(); 
    DataTable movies = dal.GetMovies(); 

    gvMovies.DataSource = movies; 
    gvMovies.AllowUserToAddRows = false; 
    gvMovies.AllowUserToDeleteRows = false; 

    //Create the new combobox column and set it's DataSource to a DataTable 
    DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); 
    col.DataSource = dal.GetMovieTypes(); ; 
    col.ValueMember = "MovieTypeID"; 
    col.DisplayMember = "MovieType"; 
    col.DataPropertyName = "MovieTypeID"; 

    //Add your new combobox column to the gridview 
    gvMovies.Columns.Add(col);