【问题标题】:Get listitem value获取列表项值
【发布时间】:2020-01-05 22:53:54
【问题描述】:

编辑/更新!!!

我想更新问题,因为下面的答案只是引导我朝着正确的方向前进,但并没有完全解决问题。

但是我确实通过改变物品的方式解决了这个问题,希望这对未来的人有所帮助

像这样将项目添加到类列表中

descriptionclb.Items.Add(new listItem { Name = ItemToAdd, Price = Convert.ToDouble(ItemPrice), Quantity = Convert.ToDouble(Quantity.Text) });

然后像这样迭代项目

    foreach (Listitem item in descriptionclb.Items)
    {
        double TotalAmmount = item.Price);
        //Do stuff with Item
    }

我试图在列表框中获取列表项的值,但一直收到错误消息“'System.InvalidCastException' 无法将 'System.String' 类型的对象转换为 'list' 类型。”

任何帮助都将不胜感激,并且我尝试进行大量研究但没有结果(也许我没有在谷歌上正确表达问题)。请参阅下面的代码。

类列表项

    public class listItem 
    {
        public string Name { get; set; }
        public double Price { get; set; }
        public double Quantity { get; set; }

        public override string ToString()
        {
            return Name;
        }
    }

我在这里插入值

        Globals.li.Name = ItemToAdd;
        Globals.li.Price = Convert.ToDouble(ItemPrice);
        Globals.li.Quantity = Convert.ToDouble(Quantity.Text);

        descriptionclb.Items.Add(Globals.li.ToString());

Globals 是一个全局类,li 是 listitem li = new listItem

我在这里得到错误

        foreach (var item in descriptionclb.Items)
        {
            double TotalAmmount = Convert.ToDouble(((list)item).Price);
        }

【问题讨论】:

  • 将 ListBox 的 DataSource 设置为您的 List<listItem>。 DisplayMember = listItem.Name。设置ValueMember,是必需的。现在,ListBox 的每个 Item 都是一个可以转换的 listItem 对象。

标签: c# winforms listitem


【解决方案1】:

您在此处添加字符串:

descriptionclb.Items.Add(Globals.li.ToString());

所以你保存的是字符串而不是 listItem 对象,这就是你得到错误的原因。

应该是:

descriptionclb.Items.Add(Globals.li);

这个对象descriptionclb.Items也应该是listItem类型

for 循环应该是这样的:

foreach (listItem item in descriptionclb.Items)
        {
            double TotalAmmount = item.Price;
        }

【讨论】:

  • 不,它不应该是descriptionclb.Items.Add(Globals.li);。也许descriptionclb.Items.AddRange(Globals.li.ToArray());Globals.li 应该是一个 List,用于处理多个对象)。单个对象也(很可能)是一个错误(尝试多次添加同一个项目,更改其内部值,将更改 ListBox 中的所有项目)。
  • @Jimi Globals.li 是 listItem 类型的对象,它没有 ToArray 方法
  • 感谢您的快速回复,但如果我出于某种原因这样做,我添加的最新项目会覆盖所有以前的输入,并且我会遇到多个重复的列表项
  • 那里,看OP在这里留下的评论。
  • @Jimi 我在程序的其他地方使用它,我添加的单个对象只是一个示例和测试。我会试试他的建议。
【解决方案2】:

在您的代码中,您有一个名为“列表”的类型。您的 foreach 循环遍历字符串列表,因此 'var item' 是一个字符串。您不能将“列表”类型转换为导致异常的字符串。

如果您尝试添加所有“listItem”价格值,那么您应该尝试将“descriptionclb.Items”的类型从字符串列表更改为“listItem”列表并直接添加listItem。然后你就可以摆脱演员阵容了。

descriptionclb.Items.Add(Globals.li);
foreach (var item in descriptionclb.Items)
{
    double TotalAmmount = item.Price;
}

只是一个注释;在 for 循环中,您不会对 TotalAmmount 做任何事情。

【讨论】:

  • descriptionclb 是一个列表框
【解决方案3】:

你需要改变

 descriptionclb.Items.Add(Globals.li);

 foreach (var item in descriptionclb.Items)
{
    double TotalAmmount = item.Price;
}

如果 TotalAmmount ,则将列表中的总票价转换为:

 double TotalAmmount=0
        foreach (var item in descriptionclb.Items)
        {
             TotalAmmount = TotalAmmount+ item.Price;
        }

【讨论】:

  • 但是如果 TotalAmmount total from amount 可以创建 double totalAmmount=0;并替换 totalAmmount=totalAmmount+item.price;
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 2011-07-29
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多