【问题标题】:Pulling multiple value members from list box从列表框中拉出多个值成员
【发布时间】:2013-07-31 18:10:11
【问题描述】:

我有一个列表框,用户可以从中选择多行,这个列表框基本上包含用户拥有的宠物列表,每个宠物都有一个引用,显示宠物名称,每个项目值成员是那只宠物的参考。如果用户在列表框中选择了多个宠物,我想提取每个值成员以便处理它们,到目前为止这是我拥有的代码:

        string lvCat;
        foreach (Object selectedCat in lstCustCats.SelectedItems)
        {
            lvCat = selectedCat as String;
            DataRow Cats = dSSystem.Bookings_Cats.NewRow();
            Cats["BookRef"] = lblBookingRefR.Text;
            Cats["CatRef"] = lvCat;
            dSSystem.Bookings_Cats.Rows.Add(Cats);
            this.bookings_CatsTableAdapter.Update(this.dSSystem.Bookings_Cats);
        }

此代码为每个选定项目获取列表框中的第一个项目,但不遍历列表框,知道如何完成此操作吗?

谢谢

【问题讨论】:

  • 您是否尝试过设置断点并检查以确保lstCustCats.SelectedItems 实际包含所选项目?
  • 这段代码应该遍历所有选定的 ListBoxItems,看不到任何失败! foreach 的行为如何?获取 SelectedItems 的第一个对象后退出?也许您刚刚选择了一个?
  • 请详细解释你的最后一句话。第一项是什么?如果它“为每个选定的项目”得到任何东西,它如何不遍历列表
  • @sine 很好,直到它应该将 value 成员分配给 lvCat 变量,而不是将“null”分配给变量,即使输入了 value 成员属性。
  • 您说selectedCat as Stringnull 赋值给lvCat,这意味着到string 的类型转换失败。您确定列表中的所有项目都是string 类型吗?因为在你的循环头中你将它们视为对象,但在正文中你将它们视为字符串。

标签: c# winforms data-binding


【解决方案1】:

您正在尝试执行lvCat = selectedCat as String; 这是错误的,因为lstCustCats.SelectedItems 中的项目不是字符串。 这应该工作

lvCat = selectedCat.ToString();

我将其标记为重复,但它非常接近this。 在你运行该代码之后,如果你在 lvCat 中获得了一个类名,那么这就是类 selectedCat 的类型。在这种情况下,您可以将 selectedCat 转换为该类型并从那里继续

【讨论】:

  • 如果selectedCat 是自定义类型,在其上运行ToString() 将返回对象类型(假设对象没有覆盖此方法),在这种情况下是没有用的。他需要将对象转换为任何类型,然后访问其上的属性/方法。
  • @PoweredByOrange 如果它是自定义类型,那么至少他会知道哪种类型。我会把它添加到答案中
猜你喜欢
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多