Im는 C# .net windows form application을 사용합니다. 테이블이있는 데이터베이스가 있습니다. 두 개의 콤보 상자가 있습니다 (A & B). sys.columns를 사용하여 테이블의 열 이름으로 콤보 상자 A를 채 웠습니다. 이제 콤보 상자 A에서 항목을 선택하면 콤보 박스 A에서 선택한 선택한 항목을 제외하고 콤보 상자 B에 동일한 항목이 채워 져야합니다.하나의 콤보 박스의 항목이 다른 주소로 들어가면 안됩니다.
답변
이 질문이나 this one과 동일한 항목을 삭제해야합니다. 어쨌든, 여기 내 대답은 다음과 같습니다.
A의 선택한 항목 변경 이벤트에서 B를 지우고 A 항목 컬렉션의 각 항목을 반복하고 현재 항목의 색인 인 동안 B에 추가합니다 A.에서의 selectedItem의 인덱스와 다른
B.Items.Clear;
foreach(object o in A.Items)
{
b.Items.Add(o);
}
b.Items.Remove(A.SelectedItem);
이 그것을 어떻게해야
b.Items.Clear;
for(int i=0; i<A.Items.Count; i++)
{
if (i!=A.SelectedItemIndex)
{
b.Items.Add(A.Items[i]);
}
}
또는
(테스트하지 의사 코드)와 같은 뭔가 좋은데.나는 당신이
m_comboB.Items.AddRange((from item in m_comboA.Items.Cast<object>()
where item != m_comboA.SelectedItem
select item).ToArray());
의 변경 이벤트에 B의 충전/제거를 코딩해야합니다 아니면 중복 항목을 제거하지 않는이 방법을 사용할 수있을 것 같아요 (샘이 지적 그의 덧글) :
m_comboB.Items.AddRange(Enumerable.Range(0, m_comboA.Items.Count)
.Where(index => index != m_comboA.SelectedIndex)
.Select(index => m_comboA.Items[index]).ToArray());
콤보 A에 중복 항목이있는 경우이 항목이 두 개 이상 제거됩니다. .... –
예, 물론, 설명은 그것에 대해 아무 말도하지 않았습니다. – Patrik
나는 정적 확장 방법과 LINQ의 조합을 사용합니다.
정적 확장 부분은 다음과 같을 것이다 :
// static class...
public static class ComboBoxHelper
{
public static string GetSelectedIndexText(this ComboBox target)
{
return target.Items[target.SelectedIndex].ToString();
}
public static object[] GetNonSelectedItems(this ComboBox target)
{
string selected = GetSelectedIndexText(target);
try
{
object[] result =
target.Items.Cast<object>().Where(c => c.ToString()
!= selected).ToArray();
return result;
}
catch
{
return new object[] { };
}
}
public static void ReplaceItems(this ComboBox target, object[] newRange)
{
target.Items.Clear();
target.Items.AddRange(newRange);
}
}
그리고 LINQ를 :
// LINQ:
private void ComboBoxA_SelectedIndexChanged(object sender, EventArgs e)
{
comboBoxB.ReplaceItems(comboBoxA.GetNonSelectedItems());
}
HTH를!
참고 : 목록 항목 배열을 반환하는 것보다 효율적인 방법이 있지만 큰 그림 (예 : 전체 성능 등)에서 큰 문제가되지는 않습니다 .....
이름이 같은 두 개의 항목이있는 경우 솔루션을 사용하여 두 항목이 모두 제거됩니다. – Patrik
- 1. 콤보 박스의 기본로드
- 2. 저장하기 전에 콤보 상자에서 콤보 박스의 유효성을 검사하는 방법 콤보 상자에서 일부 항목을 선택해야합니까?
- 3. 다른 폼의 If 문에서 콤보 박스의 선택된 인덱스 사용하기
- 4. 하나의 콤보 상자가 WPF의 다른 콤보 상자에 종속 됨
- 5. radogridview에서 콤보 박스의 표시 값 가져 오기
- 6. 자동 완성 콤보 박스의 텍스트 속성 바인딩
- 7. 콤보 박스의 ASPX 포스트 백 문제
- 8. wpf 편집 가능한 콤보 박스의 "제출"이벤트?
- 9. 콤보 박스의 이상한 동작에 대한 설명이 필요합니다.
- 10. DataGridview에서 다른 콤보 박스의 선택된 값에 따라 DataGridview에서 콤보 상자를 채우는 방법?
- 11. C를 사용하여 하나의 IP 주소에서 다른 IP 주소로 파일 보내기 #
- 12. struts2에서 콤보 박스의 숨김 및 표시 문제가 발생했습니다.
- 13. 콤보 박스를 다른 DataContext에 바인딩
- 14. 콤보 박스에 새 항목이 표시되지 않습니다.
- 15. dojo.data.ItemFileReadStore : Dijit 콤보 박스의 항목 인수가 올바르지 않습니다.
- 16. Silverlight 콤보 박스의 항목에 그룹 머리글을 표시하는 방법은 무엇입니까?
- 17. UIAutomation을 사용하여 WPF 콤보 박스의 텍스트를 표시하는 방법은 무엇입니까?
- 18. Asp.Net 콤보 박스의 가시성을 자바 스크립트 또는 Jquery로 전환하는 방법
- 19. 플렉스 드롭 다운 콤보 박스의 배경색을 선택 했습니까?
- 20. 다른 하나에서 선택된 값을 기준으로 하나의 콤보 상자 설정
- 21. 는 CSS 또는 자바 스크립트 또는 다른 방법으로 HTML의 콤보 박스의 모양을 바꿀 수 있습니다
- 22. javascript를 사용하여 하나의 콤보 값을 다른 콤보 값과 비교하는 방법은 무엇입니까?
- 23. RadComboBox 버튼을 사용하면 하나의 콤보 박스가 선택 될 때 다른 콤보 박스를 채울 수 있습니까?
- 24. 배경으로 들어가면 Android 앱이 종료됩니다.
- 25. 웹 사이트를 다른 IP 주소로 읽으려면 어떻게해야합니까?
- 26. 다른 이메일 주소로 Facebook 계정에 연결하는 문제
- 27. 타이머 틱 이벤트에서 콤보 박스의 선택된 인덱스는 마우스를 움직이는 것입니다. 왜죠?
- 28. 거기에 항목이 콤보 상자에 있는지 여부를 확인하는 방법입니다 qtp?
- 29. 실버 ItemsControl에와 콤보
- 30. 하나의 IP 주소로 해석되는 모든 도메인 이름을 찾는 방법은 무엇입니까?
그리고 질문은 ....입니까? –
중복 질문 : http://stackoverflow.com/questions/2720648/working-with-two-combo-boxes/2720728#2720728 –