合并列表中的项目c#

时间:2012-07-22 18:51:02

标签: c#

我现在有两个列表框,lstStock和lstSupply。 lstSupply由

组成
-Pen
-Pencil
-Staple
-Stapler
-Folder
-Notebook
-Eraser
-Marker

我有两个按钮,一个名为btnAdd的按钮和另一个btnRemove。

当我点击btnAdd时,我希望将lstSupply中的所选项目添加到我已完成的lstStock中

    lstStock.Item.Add(lstSupply.SelectedItem);

如果我在lstSupply中选择相同的项目两次,我希望它在lstStock中合并。 例如,如果我选择笔两次,列表框将给我“笔x 2”而不是笔在一行中,另一笔在另一行。 我觉得这与foreach有关,但我真的不知道如何使用它。

2 个答案:

答案 0 :(得分:1)

好的,首先,您需要在lstStock.中存储其他内容我会建议这样的内容:

public class StockItem {
    public string Name { get; set; }
    public int Count { get; set; }
}

接下来,我建议您不要将.Items字段用作存储库存商品的实际容器。相反,当您刷新时,我会使用List<StockItem>来填充lstSupply

private List<StockItem> _items = new List<StockItem>();

然后,当您点击“添加”时,您会做两件事:

  1. 遍历_items以查看匹配供应中是否已存在库存商品。创建一个,如果它不存在则添加它。

  2. _items中找到匹配的库存商品并增加其Count

  3. 要让它显示您喜欢的方式,我们可以在ToString()课程中覆盖StockItem。:

    public class StockItem {
        public string Name { get; set; }
        public int Count { get; set; }
    
        public override string ToString() {
            if (Count > 1)
                return Name + " x" + Count;
            return Name;
        } 
    }
    

    最后,无论何时进行任何更改,您只需重新填充lstStock

    private void RefreshGui() {
        lstStock.Items.Clear();
        lstStock.Items.AddRange(_items.ToArray());
    }
    

    还有很多其他方法可以解决这个问题,但对于这个简单的练习,我认为我会这样做。

答案 1 :(得分:0)

如果您希望代码在没有额外编码的情况下工作,您可以简单地执行此操作:

if (lstSupply.SelectedIndex > -1 && !lstStock.Items.Contains(lstSupply.SelectedItem))
        lstStock.Items.Add(lstSupply.SelectedItem);

通过这种方式,您可以确保不添加空项目并在最大时间添加每个项目