我有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