2010-11-22 2 views
2

ListBox 클래스를 재정 의하여 선택 항목의 csv 문자열을 반환하고 csv 문자열을 받아 필요할 때 목록 상자에 채워야합니다. 이 코드가 있다고 가정 해 보겠습니다. 재정의해야 할 기능은 무엇이며 어떻게해야합니까?목록 상자 컨트롤을 재정 의하여 연결 문자열 값을 반환하십시오.

using System; 
using System.Web.UI.WebControls; 
using System.ComponentModel; 
namespace MY.WebControl 
{ 
    public class ListBoxString : ListBox 
    { 

    } 
} 

답변

4

기능을 추가하기 만하면 확장 기능을 추가하여이 기능을 추가 할 수도 있습니다. 다음은 CSV 문자열에 GetSelectItems 및 문자열 배열에서 AddListItems라는 두 가지 빠른 예제입니다.

public static string GetSelectedItems(this ListBox lbox) 
    { 
     List<string> selectedValues = new List<string>(); 

     int[] selectedIndeces = lbox.GetSelectedIndices(); 

     foreach (int i in selectedIndeces) 
      selectedValues.Add(lbox.Items[i].Value); 

     return String.Join(",",selectedValues.ToArray()); 
    } 

    public static void SetSelectedItems(this ListBox lbox, string[] values) 
    { 
     foreach (string value in values) 
     { 
      lbox.Items[lbox.Items.IndexOf(lbox.Items.FindByValue(value))].Selected = true; 
     } 
    } 

    public static void AddListItems(this ListBox lbox, string[] values) 
    { 
     foreach (string value in values) 
     { 
      ListItem item = new ListItem(value); 
      lbox.Items.Add(item); 
     } 
    } 
+0

좋습니다! 고맙습니다! – tHeSiD

+0

Zach, ListBox를 채우라 고했을 때, 목록 상자에서 데이터를 선택해야했습니다. 예를 들어, 시카고 뉴욕 달라스 샌프란시스코 의 목록 상자가 있습니다. 내가 방문한 도시는 달라스와 시카고입니다. 데이터베이스에서 가져오고 양식을로드하면 시카고와 달라스가 목록 상자에서 선택되기를 원합니다. – tHeSiD

+0

CSV 문자열을 사용하고 string []을 string으로 변경하고 입력에 String.Split (',')을 수행하여 문자열 배열로 변환하려는 경우 위의 예제에 SetSelectedItems를 추가했습니다. – Zachary

1

대체 하시겠습니까? 아니면 정말로 "오버라이드하고 적절하게 오버로드합니까?"

CSV 문자열을 사용하여 문자열 (또는 List)의 배열로 구문 분석하고 AddRange에 전달하는 오버로드를 포함하도록 Add 메서드를 오버로드하고 싶습니다.

또한 ToString()을 재정 의하여 값을 CSV 목록으로 반환합니다.

+0

감사! Zach의 정의로 ToString()을 재정의하고 필요한 기능을 얻었습니다. – tHeSiD

관련 문제