如何循环检查列表框中的所有数据?

How to loop all data in checkedlistbox?

如何以'PROPER'方式循环checkedlistbox中的所有数据并在控制台打印或在messagebox上一一弹出?

我用这种方式填充了我的 clbPackages

// clbPackages is a checkedlistbox
SqlCommand scPackages = new SqlCommand("SELECT XXX FROM XXX", sqlConnection);
SqlDataReader readerPackages;
readerPackages = scPackages.ExecuteReader();
DataTable dtPackages = new DataTable();
dtPackages.Columns.Add("PACKAGE_GROUP_ID", typeof(string));
dtPackages.Columns.Add("PACKAGE_GROUP_NAME", typeof(string));
dtPackages.Load(readerPackages);

this.clbPackages.DataSource = dtPackages;
this.clbPackages.ValueMember = "PACKAGE_GROUP_ID";
this.clbPackages.DisplayMember = "PACKAGE_GROUP_NAME";

现在我必须循环检查列表框,因为我正在尝试签入一些,我最好的尝试是下面的代码

foreach (var item in clbPackages.Items)
{
    MessageBox.Show(item.ToString());               
} 

它只有 return xxx.xxx.DataRowView,如果我尝试再次循环该项目,它将显示错误 "foreach statement cannot operate on variables of type 'object' because 'object' "


比约恩回答

其他交易方式

foreach (object item in clbPackages.Items)
{     
    DataRowView castedItem = item as DataRowView;
    string groupId= castedItem["PACKAGE_GROUP_ID"].ToString();
    MessageBox.Show(groupId);
}

据我所知,您可以访问原始数据:

    this.clbPackages.DataSource = dtPackages;

因此,您只需将 DataSource 转换为原始项目(将其转换为 DataTable),就可以使用所有原始数据,不是吗?

听起来 Items 集合中的对象属于 DataRowView 类型。因此,如果您将每个项目转换为 DataRowView 并从该对象获取值,您应该没问题:

foreach (DataRowView item in clbPackages.Items)
{
    MessageBox.Show(item["PACKAGE_GROUP_NAME"].ToString());               
} 

要循环 checkedListBox 控件中的所有数据,请尝试使用此方法。

for(int i=0; i<clbPackages.Items.Count ; i++)
{
    MessageBox.Show(clbPackages.Items[i].ToString()); 
}