2010-11-22 16 views
2

ListBoxクラスを再定義して、選択したすべてのアイテムのcsv文字列を返すようにする必要があります。また、必要に応じてcsv文字列を取り込みます。私はこのコードを持っていると言うことができます。上書きしなければならない機能は何ですか?どのように機能しますか?リストボックスコントロールをオーバーライドして連結された文字列値を返します

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

    } 
} 

答えて

4

機能を追加するだけの場合は、拡張機能を追加してこの機能を追加することもできます。ここでは、GetSelectItemsをCSV文字列に、AddListItemsを文字列配列に変換する2つの簡単な例を示します。

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

ザック、私がリストボックスの作成を言ったとき、私はリストボックス内のデータを選択することを意味しました。たとえば、リストボックスに シカゴ ニューヨーク ダラス サンフランシスコ 私の訪問した都市はダラスとシカゴです。私はそれらをデータベースから取得し、フォームをロードすると、シカゴとダラスをリストボックスで選択します。 – tHeSiD

+0

CSV文字列を使い、文字列[]を文字列に変更し、文字列配列に変換するために入力にString.Split( '、')を実行する場合は、上記の例にSetSelectedItemsを追加しました。 – Zachary

1

オーバーライドを使用してもよろしいですか?それとも、本当に「オーバーライドとオーバーロードが適切か」という意味ですか?

CSV文字列を取り、文字列(またはリスト)の配列に解析してAddRangeに渡すオーバーロードを含めるには、Addメソッドをオーバーロードします。

また、ToString()をオーバーライドして値をCSVリストとして返すこともできます。

+0

ありがとうございます!私はZachからの定義でToString()をオーバーライドしました。私は必要な機能を持っていました。 – tHeSiD

関連する問題