2012-02-02 16 views
6

DataTableにバインドされたCheckedListBoxがあります。今度はプログラムによっていくつかの項目をチェックする必要がありますが、SetItemChecked(...)メソッドは項目インデックスのみを受け付けます。CheckedListBox - テキストで項目を検索

アイテムインデックスを知らなくても、テキスト/ラベルでアイテムを取得する実際的な方法はありますか?

(注:私はWinFormsの持つ限られた経験を持っている...)

答えて

6

あなたはcheckListBoxは、リスト内の項目を表示するためにobject.ToString()を使用して、独自のSetItemChecked(string item);

private void SetItemChecked(string item) 
    { 
     int index = GetItemIndex(item); 

     if (index < 0) return; 

     myCheckedListBox.SetItemChecked(index, true); 
    } 

    private int GetItemIndex(string item) 
    { 
     int index = 0; 

     foreach (object o in myCheckedListBox.Items) 
     { 
      if (item == o.ToString()) 
      { 
       return index; 
      } 

      index++; 
     } 

     return -1; 
    } 

を実装することができます。すべてのオブジェクトを検索するメソッドを実装できます。アイテムインデックスを取得するには、ToString()を使用します。アイテムインデックスを取得したら、SetItemChecked(int, bool);

とすることができます。

+0

は、多分それは私の中で 'のDataTableとの結合に依存しますが、' o.ToString() '' System.Data.DataRowView ''を返すので、' myCheckedListBox.GetItemText(o) 'を使用しなければならないと思います... – davioooh

+0

はい、あなたは正しくて –

+0

"実用的な方法 "を見たとき、それを行うには...しかし、そのようなものは、フレームワークによって提供されるようですので、私はあなた自身が提案したように私自身のメソッドを実装します。どうもありがとうございました。 – davioooh

0

あなたはあなたのDatatableを閲覧しようとするかもしれません。あなたはDataTabke.Rowsプロパティでのforeachを行うか、以下のようにSQL構文を使用することができます。

DataTable dtTable = ... 
DataRow[] drMatchingItems = dtTable.Select("label = 'plop' OR label like '%ploup%'"); // I assumed there is a "label" column in your table 
int itemPos = drMatchingItems[0][id]; // take first item, TODO: do some checking of the length/matching rows 

乾杯、

関連する問題