【问题标题】:How to loop all data in checkedlistbox?如何循环检查列表框中的所有数据?
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 宾果游戏,谢谢..我刚刚意识到@HarveySpecter 的答案只是关于如何处理退货,但你是第一位的。
【解决方案2】:

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

    this.clbPackages.DataSource = dtPackages;

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

【讨论】:

  • 谢谢,但不,我不会使用原始数据,因为我试图用新的查询结果重新验证原始数据..这就是为什么我想在控制台一上打印它一个
  • 然后使用@Björn 答案。在大多数 MVVM(甚至 MVC 模式)中,您应该对模型数据(此处为 DataSource)进行操作,而不是对 View 的数据进行操作。
【解决方案3】:

要循环一个checkedListBox控件中的所有数据,试试这个。

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

【讨论】:

    猜你喜欢
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多