我有3个表:将数据添加到数据绑定的DataGridView(的WinForms,C#)
Order (OrderId, columnXY ..)
OrderItem (OrderId, ItemId, Quantity)
Item (ItemId, Name, Price)
顺序表被绑定到一个DataGridView
。在选择改变的顺序DGV,一个orderedItem DGV填充像这样:
view.GetOrderedItemDataGridView().DataSource = dataContext.OrderItemSet.Where(o => o.OrderId == orderId).Select(o => new { o.Item.Id, o.Quantity, o.Item.Price }).ToList();
在按下AddItemButton
,打开一个对话框来选择一个项目,之后该项目应被添加到orderedItem DGV:
using (var form = new OrderItemView(dataContext.ItemSet.ToList()))
{
if (form.ShowDialog() == DialogResult.OK)
{
// Add selected item from OrderItemView to orderedItem dgv
}
else
{
}
}
通过单击SaveOrderButton可以稍后保存更改,或单击CancelOrderButton取消更改。
void view_SaveOrderClicked(object sender, EventArgs e)
{
// Get order data
int customerId = Convert.ToInt32(view.OrderCustomerID);
order.CustomerId = customerId;
order.Weight = Convert.ToDouble(view.OrderWeight);
order.Sum = Convert.ToDecimal(view.OrderSum);
order.Date = view.OrderDate;
order.AddressId = dataContext.AddressSet.Where(c => c.CustomerId == customerId && c.IsDeliveryAddress == true)
.Select(a => a.Id).SingleOrDefault();
if (!orderUpdateMode)
{
dataContext.OrderSet.Add(order);
}
else
{
dataContext.Entry(order).State = EntityState.Modified;
}
dataContext.SaveChanges();
}
我无法弄清楚如何将新项目添加到DGV,因为我不能直接行添加到数据绑定DGV。另外,我使用匿名类型填充dgv,所以我不能将类属性用作添加新项目的数据源。我是否应该创建一个新对象来填充dgv,只使用我想要显示的属性?我按照现在的方式检索数据,只有特定的列被添加到orderedItem dgv中。
我该如何解决这个问题?
干杯!
编辑: 使用的BindingSource我遇到的问题,因为I型的订单DGV的OnSelectionChanged事件方法得到...
orderedItemsBS.DataSource = dataContext.OrderItemSet.Where(o => o.OrderId == orderId).
Select(o => new { o.Item.Id, o.Item.Name, o.Quantity, o.Item.Price }).ToList();
是不一样的对视了一眼后,我得到选择OrderItem的:
void view_NewOrderItemClicked(object sender, EventArgs e)
{
using (var form = new OrderItemView(dataContext.ItemSet.ToList()))
{
if (form.ShowDialog() == DialogResult.OK)
{
var item = new { Id = form.Item.Id, Name = form.Item.Name, Quantity = form.Quantity, Price = form.Item.Price };
orderedItemsBS.Add(item);
view.GetOrderedItemDataGridView().DataSource = orderedItemsBS;
}
}
}
而且,我不希望保存任何东西到数据库中NewOrderItemClicked方法,因为用户可能编辑后按CancelButton /添加顺序。
检查我的编辑,不要在这里使用匿名类型,你应该没问题。 – gzaxx
你的意思是让一些OrderItemDisplayObject包含ItemId,ItemName,Quantity和Price的属性,然后用OrderItem和Item表中的数据设置它们? – Lahey