【发布时间】:2015-05-18 09:14:52
【问题描述】:
如何以“正确”的方式循环检查列表框中的所有数据并在控制台上打印或在消息框上一一弹出?
我以这种方式填充了我的 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";
现在我必须循环那个checkedlistbox,因为我正在尝试签入一些,我最好的尝试是下面的代码
foreach (var item in clbPackages.Items)
{
MessageBox.Show(item.ToString());
}
它只返回 xxx.xxx.DataRowView,如果我尝试再次循环该项目,它将显示错误“foreach 语句无法对 'object' 类型的变量进行操作,因为 'object'”
由比约恩回答
其他处理方式
foreach (object item in clbPackages.Items)
{
DataRowView castedItem = item as DataRowView;
string groupId= castedItem["PACKAGE_GROUP_ID"].ToString();
MessageBox.Show(groupId);
}
【问题讨论】:
-
item.ToString()这里只会返回这样的输出,因为它是一个对象。您需要使用该对象的属性从中获取数据。 -
foreach (object item in clbPackages.Items) { MessageBox.Show(item.ToString()); }更改为对象和仅显示 toString、Equals 和 getType 的所有属性
标签: c# winforms checkedlistbox