2009-08-26 5 views
4

내 Asp.NET 웹 사이트에서 여러 항목을 선택할 수있는 목록 상자가 있습니다. 다음과 같은 질문을 할 수 있습니다.ListBox에서 선택한 항목에 대한 ASP.NET 컬렉션이 있습니까?

blah = myListbox.selectedItems; 

목록 상자에서 선택한 항목의 모음을 제공 할 수 있습니다. Windows Forms 세계에서는이 방법이 있지만 asp.NET에서는 그렇지 않은 것 같습니다. 선택한 값을 찾고있는 Items 컬렉션을 반복하는 것보다 간단하게이 작업을 수행 할 수 있습니까?

답변

9

뭔가 당신이 선택한 항목 얻어야한다 :

public static class ListBoxExtensions 
{ 

    public static List<ListItem> GetSelectedItems(this ListBox listbox) 
    { 
     List<ListItem> selectedItems = new List<ListItem>(); 
     int[] selectedItemsIndexes = listbox.GetSelectedIndices(); 
     foreach (int selectedItem in selectedItemsIndexes) 
     { 
      selectedItems.Add(listbox.Items[selectedItem]); 
     } 
     return selectedItems; 
    } 
} 
: 확장 방법으로

List<ListItem> selectedItems = new List<ListItem>(); 
    int[] selectedItemsIndexes = myListbox.GetSelectedIndices(); 
    foreach (int selectedItem in selectedItemsIndexes) 
    { 
     selectedItems.Add(myListbox.Items[selectedItem]); 
    } 

이제 전화하실 수 있습니다 :

List<ListItem> selectedItems = myListBox.GetSelectedItems(); 

올레가 확장 방법은 Linq에-ified하게 될 수 있습니다 제안과 목가 더욱 아래로 축소로 :

public static class ListBoxExtensions 
{ 

    public static IEnumerable<ListItem> GetSelectedItems(this ListBox listbox) 
    { 
     var selectedItems = from ListItem i in myListbox.Items where i.Selected select i 
     return selectedItems; 
    } 
} 
+0

그리고 내가 생각하기에, 더 이상 좋은 방법이 없다고 말할 수있다. – Rob

1

직접 가져올 수있는 것처럼 보이지 않지만 GetSelectedIndices이 도움이 될 수 있습니다.

1

는 그러한 특성이 없지만 쉽게 LINQ 쿼리는 당신에게 결과를 빨리 얻을 수 쉬운.

var selectedItems = from ListItem i in myListbox.Items where i.Selected select i; 

확장 방법을 사용하면 이러한 종류의 작업을 수행해야 할 경우 더 간단하게 만들 수 있습니다.

+0

적어도 내 PC에는 이상한 일이있을 수있다. 더 많은 CTP가 설치되었고 제거 된 것보다 더운 저녁 식사를했다!), 나는 i의 타입을 지정할 필요가있다 : var selectedItems = from ListItem in myListbox.Items where i.Selected select i; – Rob

+0

아, 네가 절대적으로 옳다. 그 점을 지적 해 주셔서 감사합니다. 필자는 컴파일 된 코드를 작성하지 말고 대답을하지 않아야한다고 생각합니다. 답변이 정확하도록 업데이트되었습니다. – olle

관련 문제