2014-01-20 2 views
1

DataGrid에서 첫 번째 열에서 ComboBox를 사용 했으므로 DisplayMemberValueMember 개념을 사용하여 데이터베이스에서 일부 데이터를 가져옵니다. 이제 이전에 선택한 ComboBox에서 값을 제거하고 싶습니다. 콤보 코드 채우기조건부를 기반으로 데이터 테이블에서 행 삭제

아래에 주어진다 : 선택

dTable = getDummyTable.GetDummyTble("Dummy", "DNO", "All"); 
    dCmbData = dTable; 
    cmbDeno.DataSource = dTable; 
    cmbDeno.DisplayMember = "dyName"; 
    cmbDeno.ValueMember = "dyRemarks"; 

다음 행이 콤보에 중복 값이이어야한다.

어떻게하면됩니까?

아무도 도와 줄 수 있습니까?

+0

UI가 무엇입니까? WPF? WinForms? – StevieB

+0

그것은 C#에서 winforms입니다 – ShaQue

+0

정확히 무엇이 문제입니까? 제목은 DataTable에서 행을 삭제하겠다고 말합니다. 질문 : ComboBox에서 중복 값을 제거하려고합니다. 덧글은 이전에 선택한 값을 제거한다고 말합니다. 제발, 정확히 무엇을하려고하는지 정의하십시오 –

답변

1

잘 시도해주세요. 모든 콤보를 바인딩하는 데 사용하고있는 DataTable이 있습니다 (내가 틀렸다면 수정하십시오). 이제는 모든 콤보 중에서 항목을 선택하면 다른 모든 콤보에서 해당 항목을 제거해야합니다.

IDictionary<ComboBox, DataRow> _prevSelection; 

//Please don't mind if syntax is wrong worked too long in web 
comboBox.OnSelectedIndexChanged += fixItems; 

private void fixItems(object sender, EventArgs e) 
{ 
    var cbo= sender as ComboBox; 
    if(cbo==null) return; 

    var prev = _prevSelection[cbo]; 

    var row=<GET ROW FROM DATATABLE FOR CURRENT SELECTED VALUE>; 

    _prevSelection[cbo] = row; 

    UpdateOtherCombos(cbo, prev, cbo.SelectedItem.Value); 
} 

private void UpdateOtherCombos(ComboBox cbo, DataRow prev, object toRemove) 
{ 
    foreach(var gridrow in <YourGrid>.Rows) 
    { 
     var c = <FIND COMBO IN ROW>; 
     if(cbo.Id == c.Id) continue;//combo that triggered this all 
     var itemToRemove=null; 
     foreach(var item in c.Items) 
     { 
      if(item.Value == toRemove) 
      { 
       itemToRemove = item; 
       break; 
      } 
     } 

     //or you can get index of item and remove using index 
     c.Items.Remove(itemToRemove); 

     //Now add the item that was previously selected in this combo (that 
     //triggered this all) 
     c.Items.Add(new ComboBoxItem{Value = prev["ValueColumn"], 
             Text = prev ["TextColumn"]}); 
    } 
} 

이 그냥 당신이 모든 콤보를 반복하는 최적의 솔루션을보다는 찾는 데 도움이 될 수있는 아이디어를 제공하기 위해 : 당신은 무엇을했다 가치 이전에 저장되는 콤보 저장하는 클래스 수준의 사전을 선언해야합니다 그리드에 행이 너무 많거나 콤보가 너무 많으면 속도가 느려집니다. 그래도 이걸로조차도 작동 시키려면 몇 가지 함수/코드를 넣어야합니다. 또한 잠시 동안 WinForms에서 작업하지 않았으며, ComboBoxItem 등의 함수가 호출되었는지 확인해야합니다. :)

+0

@VillageIdiot 고맙습니다 ... – ShaQue

+0

잘 보았습니다. 도울 수있었습니다. 내가 침대를 치기 전에 마지막 타이핑이었다. :) – TheVillageIdiot

관련 문제