Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从我的列表框中删除重复项,并使用重复数再次添加_C#_Sql_Winforms - Fatal编程技术网

C# 从我的列表框中删除重复项,并使用重复数再次添加

C# 从我的列表框中删除重复项,并使用重复数再次添加,c#,sql,winforms,C#,Sql,Winforms,我正在建立一个销售点系统。我使用了一个为我的产品创建按钮的FlowLayoutPanel。因此,一旦我点击该按钮,它就会将产品转移到一个列表框。现在我被困在如何输入该产品的数量上了 我试着用数字做一个表格(比如计算器),当我按下按钮时,它会弹出,但我做不到。所以现在我有了这样一个想法,如果我点击某个产品的按钮两次,比如说,而不是把它两次放在列表框中,它会把它放一次,然后把2放在数量列中 所以我想我需要一个循环,每次我点击这个按钮都会循环。可能吗 请帮助我,任何想法或意见都非常感谢。提前谢谢 这是

我正在建立一个销售点系统。我使用了一个为我的产品创建按钮的
FlowLayoutPanel
。因此,一旦我点击该按钮,它就会将产品转移到一个
列表框
。现在我被困在如何输入该产品的数量上了

我试着用数字做一个表格(比如计算器),当我按下按钮时,它会弹出,但我做不到。所以现在我有了这样一个想法,如果我点击某个产品的按钮两次,比如说,而不是把它两次放在
列表框中,它会把它放一次,然后把2放在数量列中

所以我想我需要一个循环,每次我点击这个按钮都会循环。可能吗

请帮助我,任何想法或意见都非常感谢。提前谢谢

这是有关“列表框”的所有代码:

public RegisterForm()
    {
        InitializeComponent();

        this.WindowState = FormWindowState.Maximized;
        ChosenProductsList.DataSource = products;
        ChosenProductsList.DisplayMember = "Name";

        CreateTappedPanel();
        AddProdToTapPanel();
    }

void UpdateProductList (object sender, EventArgs e)
    {            
        Button b = (Button)sender;                           
        ProductTBL p = (ProductTBL)b.Tag;                   

        products.Add(p);
        ChosenProductsList.SelectedIndex = ChosenProductsList.Items.Count - 1;                   
    }

private void FormatListItem(object sender, ListControlConvertEventArgs e)
    {
        string CurrentName = ((ProductTBL)e.ListItem).Name;
        string currentPrice = String.Format("{0:c}", ((ProductTBL)e.ListItem).Price);
        string currentNamePadded = CurrentName.PadRight(20);

        e.Value = currentNamePadded + currentPrice;
    }

使用LINQ,您可以通过以下方法轻松实现这一点:

例如:

internal class VideoGame
{
    public string Name { get; set; }
}

var game1 = new VideoGame {Name = "MegaMan"};
var game2 = new VideoGame {Name = "Super Mario Bros"};
var game3 = new VideoGame {Name = "Kirby"};

var list = new List<VideoGame>();
list.Add(game1);
list.Add(game2);
list.Add(game2);
list.Add(game3);
list.Add(game3);
list.Add(game3);

IEnumerable<VideoGame> videoGames = list.Distinct();
var enumerable = videoGames.Select(s => new {VideoGame = s, Count = list.Count(t => t.Name == s.Name)});
输出:

VideoGame: MegaMan, Count: 1
VideoGame: Super Mario Bros, Count: 2
VideoGame: Kirby, Count: 3
请注意,我使用了,但您可以使用自己的类型


我留给您更新列表框的任务,应该是相当容易的:使用列表框,它的主要优点之一是它可以接受任何对象作为项目。这意味着您可以创建自己的对象,重写ToString方法以显示所需的数据,如果希望返回所选项目,只需将其转换回原始类型即可

public class Item
{
    public string name = "";
    public int count = 0;
    public override string ToString()
    {
        return name;
    }
}
创建
项目的列表

List<Item> items = new List<Item>()
{
    new Item{name = "A", count = 1},
    new Item{name = "B", count = 1},
};
要增加计数,请在Items集合中查找项目,将其强制转换为
item
,并增加count属性 使用所选项目的步骤

Item pickeditem = (Item)listbox1.SelectedItem;

这应该很容易。您可以迭代
列表框
成员,并操作您要查找的项,前提是删除项后不再继续查找。或者,如果您有房地产,您可能更喜欢使用带有自定义控件的
StackPanel
来执行类似web购物车(或本页右侧的相关列)的操作。@JohnC这是Winforms,不是WPF。很抱歉,我没有指定它是winforms。请查看问题的外观,并通过提高可读性来改进它。我们让我们的代码看起来井然有序、美观,为什么不在我们提问时遵循这个好传统呢?;)我尝试了你的答案,但它给出了错误。请检查我包含的代码,并告诉我如何使用你的答案。
listbox1.DataSource = items;
Item pickeditem = (Item)listbox1.SelectedItem;