2011-02-02 106 views
20

我在C#中的WinForm中使用了CheckedListBox。我有這個約束控制,如下圖所示 -如何從CheckedListBox中獲取檢查項目的值?

chlCompanies.DataSource = dsCompanies.Tables[0]; 
chlCompanies.DisplayMember = "CompanyName"; 
chlCompanies.ValueMember = "ID"; 

我可以檢查的項目的索引,但我怎樣才能得到檢查項目文本和值。而我如何枚舉通過CheckedItems訪問文本和值?

感謝分享你的時間。

回答

25

轉換回原來的類型,這將是一個DataRowView的,如果你綁定表,然後就可以得到從適當的列的Id和文本:

foreach(object itemChecked in checkedListBox1.CheckedItems) 
{ 
    DataRowView castedItem = itemChecked as DataRowView; 
    string comapnyName = castedItem["CompanyName"]; 
    int? id = castedItem["ID"]; 
} 
+0

我的朋友,我想你還沒有徹底解決我的問題。我正在使用CheckedListBox。我不需要任何選擇,而是我想檢查項目。該屬性僅給出所選項目的值。 – IrfanRaza 2011-02-02 14:43:12

+0

編譯器通過SelectedValue生成錯誤消息。 – IrfanRaza 2011-02-02 14:47:03

+0

@ w69rdy:`CheckedItems`屬性是一個`objects`數組。一個`object`沒有`SelectedValue`屬性,它們可以是任何東西。 – 2011-02-02 14:51:55

7

您可以在CheckedItems屬性迭代:

foreach(object itemChecked in checkedListBox1.CheckedItems) 
{ 
    MyCompanyClass company = (MyCompanyClass)itemChecked;  
    MessageBox.Show("ID: \"" + company.ID.ToString()); 
} 

http://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.checkeditems.aspx

+0

謝謝埃文!但我的問題是如何獲得檢查項目的關聯ID? – IrfanRaza 2011-02-02 14:37:47

+0

@IrfanRaza:查看我編輯的代碼示例。您需要將每個檢查過的項目轉換爲您的自定義數據類型以訪問其特定屬性。 – 2011-02-02 14:50:27

12

編輯:我意識到有點晚了,它被綁定到一個DataTable。在這種情況下,這個想法是一樣的,如果你想使用這個類,你可以投到DataRowView然後拿它的屬性得到DataRow

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var row = (item as DataRowView).Row; 
    MessageBox.Show(row["ID"] + ": " + row["CompanyName"]); 
} 

您將需要轉換或分析的項目,以自己的強類型的等價物,或使用System.Data.DataSetExtensions命名空間使用DataRowExtensions.Field method以下證明:

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var row = (item as DataRowView).Row; 
    int id = row.Field<int>("ID"); 
    string name = row.Field<string>("CompanyName"); 
    MessageBox.Show(id + ": " + name); 
} 

你需要投項目訪問您的班級的屬性。

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var company = (Company)item; 
    MessageBox.Show(company.Id + ": " + company.CompanyName); 
} 

另外,還可以使用OfType擴展方法來獲得強類型的返回結果,而不在循環中明確鑄造:

foreach (var item in checkedListBox1.CheckedItems.OfType<Company>()) 
{ 
    MessageBox.Show(item.Id + ": " + item.CompanyName); 
} 
-2

你可以試試這個:

string s = ""; 

foreach(DataRowView drv in checkedListBox1.CheckedItems) 
{ 
    s += drv[0].ToString()+","; 
} 
s=s.TrimEnd(','); 
0

Egypt Development Blog : Get value of checked item in CheckedListBox in vb.net

後綁定CheckedListBox數據就可以得到檢查的項目

For i As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1 
        Dim XDRV As DataRowView = CType(CheckedListBox1.CheckedItems(i), DataRowView) 
        Dim XDR As DataRow = XDRV.Row 
        Dim XDisplayMember As String = XDR(CheckedListBox1.DisplayMember).ToString() 
        Dim XValueMember As String = XDR(CheckedListBox1.ValueMember).ToString() 
        MsgBox("DisplayMember : " & XDisplayMember & " - ValueMember : " & XValueMember) 
Next 

現在你可以在迴路中

希望使用CheckedListBox的價值或檢查的項目顯示從2個可變XDisplayMember而XValueMember的價值有用。

0
foreach (int x in chklstTerms.CheckedIndices) 
{ 
    chklstTerms.SelectedIndex=x; 
    termids.Add(chklstTerms.SelectedValue.ToString()); 
} 
-1

嘗試:

foreach (var item in chlCompanies.CheckedItems){ 
    item.Value //ID 
    item.Text //CompanyName 
    } 
0

要獲得一個CheckedListBox所有選擇的項目試試這個:

在這種情況下的部份值是一個字符串,但它與其他類型的對象的運行:

for (int i = 0; i < myCheckedListBox.Items.Count; i++) 
{ 
    if (myCheckedListBox.GetItemChecked(i) == true) 
    { 

     MessageBox.Show("This is the value of ceckhed Item " + myCheckedListBox.Items[i].ToString()); 

    } 

} 
相關問題