如何循环使用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);
}
答案 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());
}