如何从CheckedListBox获取已检查项的值?

我在C#中的WinForm上使用了CheckedListBox。 我已经限制了这个控制,如下所示 –

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

我可以获得已检查项目的索引,但我如何获得检查项目文本和值。 而是如何通过CheckedItems枚举访问文本和值?

谢谢你分享你的时间。

将其强制转换为原始类型,如果要绑定表,则将其作为DataRowView,然后可以从相应的列中获取Id和Text:

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

编辑:我意识到它被绑定到DataTable有点晚了。 在这种情况下,这个想法是相同的,如果你想使用该类,你可以转换为DataRowView然后获取其Row属性以获取DataRow

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

您需要将项目转换或解析为强类型的等效项,或使用System.Data.DataSetExtensions命名空间来使用下面演示的DataRowExtensions.Field方法 :

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

您可以遍历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

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

埃及开发博客:获取vb.net中CheckedListBox中已检查项的值

在使用数据绑定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 

现在您可以使用循环中2变量XDisplayMember和XValueMember中CheckedListBox中的已检查项的值或显示

希望有用。

要获取CheckedListBox中的所有选定项,请尝试以下操作:

在这种情况下,ths值是一个String,但它与其他类型的Object一起运行:

 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()); } } 

尝试:

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

你可以试试这个:

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