我正在建立一个销售点系统。我使用FlowLayoutPanel
为我的产品创建按钮。因此,一旦我点击该按钮,它就会将产品转移到listbox
。现在我不知道如何输入该产品的数量?
我试着制作一个带有数字的表格(比如计算器),当我按下按钮时,它弹出但我不能。所以现在我有了这个想法,例如,如果我点击某个产品的按钮两次,而不是在listbox
中将它放两次,而是将它放在一次,并将2放在数量列中。
所以我想我需要某种循环,每次单击该按钮时都会循环。这可能吗?
请帮助我,任何想法或意见都非常感谢。提前谢谢。
这是关于'ListBox'的所有代码:
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;
}
答案 0 :(得分:0)
使用LINQ,您可以使用Distinct(),Select()和Count()方法轻松实现这一目标:
示例:
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)});
现在我将enumerable
转换为字符串,以便您可以看到结果:
var @join = string.Join(Environment.NewLine, enumerable.Select(s => string.Format("VideoGame: {0}, Count: {1}", s.VideoGame.Name, s.Count)));
输出:
VideoGame: MegaMan, Count: 1
VideoGame: Super Mario Bros, Count: 2
VideoGame: Kirby, Count: 3
请注意,我使用的是anonymous type,但您可以使用自己的类型。
我告诉你更新ListBox的任务,应该很容易做到:D
答案 1 :(得分:0)
使用列表框,它的一个主要优点是它将接受任何对象作为项目。这意味着您可以创建自己的对象,覆盖ToString方法以显示所需的数据,如果您想要返回所选项,则只需将其转换回原始类型。
public class Item
{
public string name = "";
public int count = 0;
public override string ToString()
{
return name;
}
}
创建Item
List<Item> items = new List<Item>()
{
new Item{name = "A", count = 1},
new Item{name = "B", count = 1},
};
填充列表框。使用ToString
方法
listbox1.DataSource = items;
要增加计数,请找到Items集合中的项目,将其强制转换为Item
并增加count属性
使用所选项目
Item pickeditem = (Item)listbox1.SelectedItem;