Adding data to data bound DataGridView (WinForms, C#) -
i have 3 tables:
order (orderid, columnxy ..) orderitem (orderid, itemid, quantity) item (itemid, name, price)
the order table bound datagridview
. on selection changed order dgv, ordereditem dgv populated this:
view.getordereditemdatagridview().datasource = datacontext.orderitemset.where(o => o.orderid == orderid).select(o => new { o.item.id, o.quantity, o.item.price }).tolist();
upon pressing additembutton
, dialog opens pick item, after item should added ordereditem dgv:
using (var form = new orderitemview(datacontext.itemset.tolist())) { if (form.showdialog() == dialogresult.ok) { // add selected item orderitemview ordereditem dgv } else { } }
the changes supposed saved later, clicking saveorderbutton, or canceled clicking cancelorderbutton.
void view_saveorderclicked(object sender, eventargs e) { // 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(); }
i can't figure out how add new item dgv, since can't add rows directly data bound dgv. also, i'm populating dgv anonymous type, can't have class property use data source add new item. should maybe make new object fill dgv, using properties want displayed? i'm retrieving data way right columns added ordereditem dgv.
how can solve problem?
cheers!
edit: when using bindingsource run problems because type in onselectionchanged event method of order dgv ...
ordereditemsbs.datasource = datacontext.orderitemset.where(o => o.orderid == orderid). select(o => new { o.item.id, o.item.name, o.quantity, o.item.price }).tolist();
is not same 1 after selecting 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; } } }
also, don't want save db in neworderitemclicked method since user might press cancelbutton after editing/adding order.
either use bindingsource
, add items (will automatically update datagridview
bound (tutorial) or rebind data source after adding:
view.getordereditemdatagridview().datasource = null; view.getordereditemdatagridview().rows.clear(); view.getordereditemdatagridview().datasource = datacontext.orderitemset.where(o => o.orderid == orderid).select(o => new { o.item.id, o.quantity, o.item.price }).tolist();
after edit:
first of all: not use anonymous type, create normal class , work it.
second:
view.getordereditemdatagridview().datasource = ordereditemsbs;
this line not needed, instead add this: ordereditemsbs.resetbindings(false);
Comments
Post a Comment