2012-01-03 3 views
0

DataGridView에는 DataGridViewComboCell 인 셀이 있습니다. 각 DataGridViewComboCell은 BindingList의 고유 복사본에 바인딩됩니다. 바인딩 목록에서 항목을 제거하면 comboboxes는 바인딩 목록에서 제거한 항목을 제거합니다.
그러나 값을 선택하면 셀의 선택된 항목으로 유지됩니다.BindingList에서 항목을 제거해도 DataGridViewComboBoxCell이 새로 고쳐지지 않습니다.

나는 datagridview.refresh()를 시도했지만 여전히 도움이되지 못했습니다.

1) 당신은 새로 고침 후에지며 EndEdit를 호출 할 필요가 없습니다 : 그것은

// _contractLists is List<BindingList<String>> which is the datasource for a datagridviewcombobox 

List<String> removedList = new List<string>(); 
_contractSelForm.ShowDialog(); 
_contractSelForm.GetandClearRemovedContracts(ref removedList); 

foreach (BindingList<String> contractList in _contractLists) 
{ 
    // remove deleted favorites 
    foreach (string contract_name in removedList) 
    { 
     contractList.Remove(contract_name); 
    } 
} 

dataGridView1.Refresh(); 
dataGridView1.EndEdit();   
+1

올바른 이벤트에서 바인딩을 이동하거나 변경하고 있습니까? 당신이 사용하고있는 코드를 붙여 넣을 수 있습니까? 또한 datagridview.Bind() 또는 바인딩 뭔가 보길 들리는데 .. 그냥 코드를 보지 않고 여기에 맞춰 짐 – MethodMan

+0

BindingList를 콤보 상자 열에 바인딩하는 방법을 보여줄 수 있습니까? dataGridView1은 가상 모드입니까? – Kimberly

답변

1

이 /주의 보는 일의 커플 도구 스트립 메뉴 항목에서 호출지고 있습니다. 호출해야하는 경우 Refresh 전에 호출해야합니다.

2) 콤보 상자에 DropDownStyle의 DropDown이있는 경우이 동작이 예상됩니다. MSDN documentation에서

:

당신이 드롭 다운에 DropDownStyle 속성을 설정하면, 당신은 콤보 상자의 편집 가능한 영역에 값을 입력 할 수 있습니다.

이 값을 변경하려면 DropDownStyle을 DropDownList로 변경하거나 항목을 제거한 후 코드에서 값을 수동으로 지우십시오.

관련 문제