잘 시도해주세요. 모든 콤보를 바인딩하는 데 사용하고있는 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
등의 함수가 호출되었는지 확인해야합니다. :)
UI가 무엇입니까? WPF? WinForms? – StevieB
그것은 C#에서 winforms입니다 – ShaQue
정확히 무엇이 문제입니까? 제목은 DataTable에서 행을 삭제하겠다고 말합니다. 질문 : ComboBox에서 중복 값을 제거하려고합니다. 덧글은 이전에 선택한 값을 제거한다고 말합니다. 제발, 정확히 무엇을하려고하는지 정의하십시오 –