【问题标题】:Populating Listbox with a List of objects用对象列表填充列表框
【发布时间】:2014-04-06 09:01:33
【问题描述】:

您好,我正在尝试使用来自另一个名为 produkt 的具有 3 个字符串值的类的对象的值填充我的列表框。列表框中的每个项目都应该有产品名称、序列号和价格,如果列表框中已经包含具有相同产品名称或商品编号的项目,我希望弹出一个消息框。我的问题是,当我尝试使用我的 List.Add(newProduct) 将对象作为包含这些值的字符串添加到我的列表框时,它不会转到我的列表框,当我尝试打印它时,它会显示 Mediastore.produkt。我尝试了许多不同的方法来解决这个问题,我用 toString 尝试将我的对象的值变成一个字符串。 有什么想法可以让我的列表框显示列表的内容吗?

public void NewProdct_Click(object sender, EventArgs e)        
{
    string productname;
    string warenumber;
    string Price_;

    productname = ProdNamn.Text;
    warenumber = Varu_Nr.Text;
    Price_ = pris_.Text;

    List<produkt> List = new List<produkt>();

    if(List.Any( produkt => produkt.Name == productname || produkt.Serialnumber == warenumber)) 
    {
        MessageBox.Show("Product with that name or warenumber");
        return;
    }

    var newProdukt = new produkt()
    {
        Name = productname,
        Serialnumber = warenumber,
        price = Price_
    };
    string random;
    random = newProdukt.Name + newProdukt.price + newProdukt.Serialnumber ;

    List.Add(newProdukt);
    Console.WriteLine(newProdukt);
}

【问题讨论】:

  • 您是否在列表框中设置了 DisplayMember 和 ValueMember?
  • 不,我没有,但我不知道该怎么做,因为我声明我的 Lista(列表框)是一个产品列表。如果我改变它,我的 if(Lista.Any( produkt => produkt.Name == productname || produkt.Serialnumber == warenumber)) 不会停止工作吗?
  • 不,它会正常工作,只需设置您的 listbox.DispalyMember = "Name" 和 listbox.ValueMember="SerialNumber" 并且您还有另一个选项覆盖 produkt 中的 ToString 并返回 Name;

标签: c# list object listbox


【解决方案1】:

您可以将产品列表定义为 ListBox 的数据源,并将 DisplayMember 设置为字段。

或者您可以将 ToString() 方法添加到您的产品类。这将用于在 ListBox 中显示产品。

【讨论】:

  • 我声明我的 Listbox(Lista) 是一个产品列表,所以如果我改变它,我的 if(Lista.Any( produkt => produkt.Name == productname || produkt.Serialnumber == warenumber)) 停止工作?
  • 如果我们确实在谈论 Winforms ListBox,它根据定义是对象的集合,并且能够保存任何类的对象并使用它们的 ToString() 方法显示它们。如果你不这样做t 提供一个它将显示类名。或者您可以定义一个显示成员。顺便说一句:在您向我们展示的代码中,我没有看到 Lista
  • 是的,很抱歉它应该是 List Lista = new List(); Lista 是我的列表框的名称。感觉这是一种奇怪的方法,我将列表框更改为一个列表,它有点让我的大脑混乱,但我问了我的老师,他说这是最简单的方法。您是否认为我有 1 个列表和一个列表框,并且它们在某种程度上是不同的类型但共享相同的变量?
  • List Lista = new List(); Lista 是我的列表框的名称。 这不可能。您正在声明一个与您的 ListBox 同名的 List 从而隐藏 Listbox?此外,您永远不会添加到您真正的 ListBox,因为这将是 Lista.Items.Add(newProdukt) 或任何 ListBox 的名称;是的,显式声明一个类可以更容易地扩展它。
  • 我给他看了我的代码,他建议我做 List Lista = New List();所以我猜他当时犯了一个错误..
猜你喜欢
  • 1970-01-01
  • 2013-04-21
  • 2017-03-02
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2011-05-28
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多