我有"餐厅条例草案"需要DataGrid。
如果客户添加相同的商品,而不是添加重复的行,我需要将数量列更新为1.
在上图中,当我再次点击海鲜Alfredo 时,数量会变为2,但会增加另一行海鲜Alfredo 。我该如何防止这种情况发生?
将项目添加到datagrid的代码
private void cbbxMainCourse_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//Populate DataGrid with item selected from combobox
MainCourse selectedMainCourse = (MainCourse)cbbxMainCourse.SelectedItem;
//DataGrid dgDishes add that item
dgDishes.Items.Add(selectedMainCourse);
selectedMainCourse.Quantity = 0;
//Iterate through dgDishes and increase Quantity by 1 for duplicate item
foreach (var item in dgDishes.Items)
{
if (item == selectedMainCourse)
{
selectedMainCourse.Quantity ++;
}
}
}
修改1:
适用于DataGrid
<DataGrid ItemsSource="{Binding}" Width="400" Height="200" Margin="58.5, 100, 58.5, 0" x:Name="dgDishes" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Category" Binding="{Binding Category}"/>
<DataGridTextColumn Header="Price" Binding="{Binding Price}"/>
<DataGridTextColumn Header="Quantity" Binding="{Binding Quantity}"/>
</DataGrid.Columns>
</DataGrid>
主要课程
public class MainCourse : INotifyPropertyChanged
//: INotifyPropertyChanged
{
public string Name { get; set; }
public string Category { get; set; }
public double Price { get; set; }
//public int Quantity { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
private int _quantity;
public int Quantity
{
get { return _quantity; }
set
{
_quantity = value;
//NumOrdered = 1;
OnPropertyChanged(new PropertyChangedEventArgs("Quantity"));
}
}
}
组合框
<ComboBox x:Name="cbbxMainCourse" Margin="40,40,40,240" Width="400" Height="30" SelectionChanged="cbbxMainCourse_SelectionChanged">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
答案 0 :(得分:1)
if(!dgDishes.Items.Contains(selectedMaincourse))
dgDishes.Items.Add(selectedMainCourse);
else
selectedMainCourse.Quantity++;
如果已经存在,请不要添加到集合中。如果该项目已存在于dgDishes中,则只需迭代selectedMainCourse的Quantity属性
了解您用于dgDishes的数据结构
也很有帮助答案 1 :(得分:1)
您正在将selectedMainCourse添加到数据网格,而不检查该元素是否已存在。您可以尝试这样的事情:
if (dgDishes.Items.All(dish => dish.Name != selectedMainCourse.Name)) {
selectedMainCourse.Quantity = 1;
dgDishes.Items.Add(selectedMainCourse);
}
else {
dgDishes.Items.First(dish => dish.Name == selectedMainCourse.Name).Quantity++;
这样你就可以添加一个数量为1的新菜,或增加已经存在的菜肴的数量。
当然,我的回答是使用LINQ发布的,但您可以通过将All和First调用解析为for循环来进行比较来创建类似的行为。