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

Irf*_*aza 27 .net c# checkedlistbox winforms

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

chlCompanies.DataSource = dsCompanies.Tables[0];
chlCompanies.DisplayMember = "CompanyName";
chlCompanies.ValueMember = "ID";
Run Code Online (Sandbox Code Playgroud)

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

谢谢你分享你的时间.

Iai*_*ard 31

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

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


Ahm*_*eed 14

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

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

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

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);
}
Run Code Online (Sandbox Code Playgroud)

您需要强制转换项以访问类的属性.

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

或者,您可以使用OfType扩展方法获取强类型结果,而无需在循环中显式转换:

foreach (var item in checkedListBox1.CheckedItems.OfType<Company>())
{
    MessageBox.Show(item.Id + ": " + item.CompanyName);
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案! (2认同)

Eva*_*ski 9

您可以遍历该CheckedItems属性:

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

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