2010-04-09 3 views
2

다중 선택을 사용하는 Winforms 목록 상자에서 선택된 값 (VALUES가 아닌 텍스트를 유의하십시오)을 얻으려면 BATTLING 중이며 이름을 가져 오는 데이터베이스 테이블에 바인딩되어 있습니다. DisplayMember) 및 ID (ValueMember로) - 선택한 항목의 ID가 필요합니다..NET 3.5 목록 상자 선택 값 (Winforms)

목록 상자 컨트롤에는 SelectedValue에 대한 속성이있어 선택한 항목 값 중 하나를 가져올 수 있지만 선택한 항목 값 중 하나는 가져올 수 없습니다.

SelectedItems 속성은 Listbox.SelectedObjectCollection을 반환하며 항목의 값을 추출 할 수 없습니다.

도와주세요! 감사.

+1

목록 상자에 항목을 삽입하는 방법을 보여줄 수있는 코드를 추가 할 수 있습니까? –

+0

목록 상자가 이름이 DisplayMember 및 ID를 ValueMember로 가져 오는 데이터베이스 테이블에 바인딩되었습니다. – Jimbo

답변

4

컬렉션의 각 object을 원하는 type으로 전송 해보세요. 내 항목 유형 Customer의 경우 예를 들어, 나는

var selected = listBox1.SelectedItems; 

foreach (var item in selected) 
{ 
    var singleCustomer = (Customer)item; 
} 

지금 당신은 당신이 Customer에서 원하는 특성을 얻을 수 있습니다 ... 같은 것을 할 수 있습니다.

이것은 간단한 예이지만 문제에 개념을 적용 할 수 있다고 확신합니다. (질문 목록 상자를 나타 내기 위해 업데이트 된 후에 테이블에 바인딩)

UPDATE : 당신이 DataTable에 바인딩하는 경우

것은, 당신이 (다시, 사소한하지만와 관계있는) 이런 식으로 뭔가를 시도 할 수 :

var selected = listBox1.SelectedItems; 

foreach (var item in selected) 
{ 
    var itemArray = ((DataRowView)item).Row.ItemArray; 

    var name = itemArray[0]; 
    var id = itemArray[1]; 
} 
+0

이것은 수동으로 추가 할 때 수행 한 방법이지만 바운드 컨트롤과 함께 작동하는 방법을 모르겠습니다. –

3

원하는 항목이 원하는 항목입니다.

SelectedItem 및 SelectedValue는 DisplayMember 및 ValueMember를 설정할 때만 다릅니다. Multi-select가 지원되지 않는다고 생각합니다.

목록 상자에 어떤 유형의 항목을 추가 하시겠습니까?

+0

죄송합니다. 초기 질문을 업데이트했습니다. DisplayMember로 이름이 있고 ValueMember가 ID 인 데이터베이스 테이블에 컨트롤을 바인딩했습니다. 선택한 항목 ID를 얻고 싶습니다. – Jimbo

+0

@Steve Dignans의 답변을 참조하십시오. 아마도 CustomerRow 또는 뭔가에 캐스트해야 할 것입니다. –

0

요소 [0]는 "ValueMember"소자 [1]있을 것 "을 DisplayMember"일 것이다. OP의 "ID"필드가 정수라고 가정하면 다음을 시도하십시오.

int selectedCount = lstBxOb10Customer.SelectedItems.Count; 
int[] selectedIDs = new int[selectedCount]; 
string[] selectedNames = new string[selectedCount]; 

for (int selected = 0; selected < selectedCount; selected++) 
{ 
    var itemArray = ((DataRowView)item).Row.ItemArray; 

    selectedIDs[selected] = (int)itemArray[0]; 
    selectedNames[selected] = (string)itemArray[1]; 
}