如何在checkedlistbox中循环所有数据?

时间:2015-05-18 09:14:53

标签: c# winforms checkedlistbox

如何循环使用checkedlistbox中的所有数据' PROPER'方式并在控制台上打印或逐个弹出消息框?

我用这种方式填充了我的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());               
} 

它只返回xxx.xxx.DataRowView,如果我再次尝试循环该项,它将显示错误" foreach语句不能对类型' object'的变量进行操作。因为'对象' "

由Bjorn回答

其他处理方式

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

3 个答案:

答案 0 :(得分:3)

听起来像Items-collection中的对象是DataRowView类型。因此,如果您将每个项目转换为DataRowView并从该对象获取值,那么您应该没问题:

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

答案 1 :(得分:1)

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

    this.clbPackages.DataSource = dtPackages;

所以你要做的就是将你的DataSource转换为原始项目(将其转换为DataTable),你可以使用所有原始数据,不是吗?

答案 2 :(得分:1)

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

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