2012-02-02 72 views
6

我有一個CheckedListBox綁定到DataTable。現在我需要以編程方式檢查一些項目,但我發現SetItemChecked(...)方法只接受項目索引。CheckedListBox - 通過文本搜索項目

是否有一種實際的方式來獲取文本/標籤的項目,而不知道項目索引?

(注:我有與WinForms的經驗有限...)

回答

6

您可以實現自己的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; 
    } 

的checkListBox使用object.ToString()顯示列表中的項目。你可以實現一個搜索所有對象的方法.ToString()獲得一個項目索引。一旦你有物品指數,你可以打電話SetItemChecked(int, bool);

希望它有幫助。

+0

也許這取決於與一個DataTable綁定,但'o.ToString()'在我大小寫返回'「System.Data.DataRowView」',所以我認爲我必須使用'myCheckedListBox.GetItemText(o)'... – davioooh 2012-02-02 10:59:03

+0

是的,你是對的 – 2012-02-02 11:00:54

+0

當我看到「實用的方式」,我的意思是現有的方法要做到這一點......但似乎任何類似的東西都是由框架提供的,所以我會按照您的建議實施我自己的方法。非常感謝你。 – davioooh 2012-02-02 11:12:00

0

您可以嘗試瀏覽您的Datatable。你可以做一個foreach所DataTabke.Rows屬性或使用如下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 

乾杯,