簡體   English   中英

合並列表中的項目c#

[英]consolidate items in a list c#

我現在有兩個列表框,lstStock和lstSupply。 lstSupply包含

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

我有兩個按鈕,一個按鈕名為btnAdd,另一個按鈕btnRemove。

當我單擊btnAdd時,我希望將lstSupply中的所選項目添加到lstStock中,我已經通過

    lstStock.Item.Add(lstSupply.SelectedItem);

如果我兩次在lstSupply中選擇相同的項目,則希望將其合並到lstStock中。 例如,如果我兩次選擇Pen,則列表框應給我“ Pen x 2”,而不是一行中的Pen和另一行中的另一筆。 我覺得這正在處理foreach,但我真的不知道該如何使用。

好的,首先,您將需要在lstStock.存儲其他lstStock. 我建議這樣的事情:

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

接下來,建議您不要將.Items字段用作存儲庫存項目的實際容器。 取而代之的是,我有一個List<StockItem> ,您可以使用lstSupply在刷新時填充lstSupply

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

然后,當您單擊“添加”時,您將做兩件事:

  1. 遍歷_items以查看匹配的供應中是否已經有庫存項目。 創建一個,然后添加它(如果不存在)。

  2. _items找到匹配的庫存物料並增加其Count

為了使其顯示您想要的方式,我們可以在StockItem類中重寫ToString()

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());
}

還有很多其他方法可以解決此問題,但是對於這個簡單的練習,我認為這是我會做的。

如果您希望代碼無需額外編碼即可工作,則只需執行以下操作:

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

這樣,您可以確定您不會添加空項目,並且最多添加一次每個項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM