2014-01-20 2 views
1

DataTable이 있습니다.DataGridViewComboBoxCell에 다른 데이터 소스

통화 ID | 통화


0 | USD

1 | 바트

2 | 유로

5 | 루피

6 | 엔

이 테이블을 DataGridViewCombobox 셀에 바인딩했습니다. 사용자는 하나의 통화를 한 번 선택할 수 있습니다. 사용자가 처음 DataGridViewRow에서 'USD'를 선택하면 다음 행의 콤보 상자에 'USD'가 표시되지 않습니다. 알 겠어? 나는 이것을 시도했다.

private void setCellComboBoxItems(DataGridView dataGrid, int rowIndex, int colIndex, DataTable itemsToAdd) 
    { 
     DataGridViewComboBoxCell currencycell = (DataGridViewComboBoxCell)dataGrid.Rows[rowIndex].Cells[colIndex]; 

     currencycell.DataSource = dtCurrency; 
     currencycell.ValueMember = "CurrencyId"; 
     currencycell.DisplayMember = "CurrencyShortName"; 
    } 

DataSource 속성을 수정할 수 없습니다. 나는 그것을 어떻게 얻을 수 있는가? 감사.

+0

tmp를 데이터 테이블을 유지하고 데이터 테이블에서 선택한 값을 제거하고 내가 currencycell.DataSource에 tmp를 데이터 테이블을 바인딩 할 때 currencycell.DataSource' – Damith

+0

'에 tmp를 데이터 테이블을 결합 , 상기 셀의 선택된 값은 사라진다. @Damith – Zan

답변

0

표시 할 데이터 소스로 사용하는 선택한 값을 제거하는 데이터 소스 사본이 있어야합니다.

DataGridView.EditingControlShowing 이벤트를 구독하고 아래의 편집 컨트롤에서 콤보 박스를 가져 와서 해당 데이터 소스를 데이터 소스의 복사본으로 설정하십시오.

샘플 코드 :

void myDGV_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     ComboBox comboBox = e.Control as ComboBox; 
     if (comboBox != null) 
     { 
      comboBox.DataSource = displayDataSource; 
     } 
    }