c# - using DataColumn's Expression property get concated text from ChildRows -
i have dataset within 2 datatable, mastertable has pk relation link detailtable. know expression can summary value of child like
dtmaster.columns.add(new datacolumn("totalqty", 0, "sum(child.qty)")); but need concate string,
dtmaster.columns.add(new datacolumn("haserrors", 0, "concat(child.errortext + ';')")); i know column expression not support concat, now, need detect table.columnchanging event menually set master's haserror field value.
can guild me more automatic way doing this?
here sample code
internal static void test() { var ds = new dataset(); var dtmaster = ds.tables.add("master"); var colidmaster = dtmaster.columns.add("id"); var dtdetail = ds.tables.add("detail"); var coliddetail = dtdetail.columns.add("id"); dtdetail.columns.add("cid"); dtdetail.columns.add("qty", typeof(int)); dtdetail.columns.add("errortext", typeof(string), "iif(qty null, 'qty err', '')"); ds.relations.add("m2d", colidmaster, coliddetail, false); //i know can dtmaster.columns.add("totalqty", typeof(int), "sum(child.qty)"); //here asking solution //dtmaster.columns.add("containerrors", typeof(string), "concat(child.errortext + ';')"); var newmasterrow = dtmaster.newrow(); newmasterrow["id"] = "a"; dtmaster.rows.add(newmasterrow); var newdetailrow = dtdetail.newrow(); newdetailrow["id"] = "a"; newdetailrow["cid"] = "d1"; newdetailrow["qty"] = dbnull.value; dtdetail.rows.add(newdetailrow); newdetailrow = dtdetail.newrow(); newdetailrow["id"] = "a"; newdetailrow["cid"] = "d2"; newdetailrow["qty"] = 10; dtdetail.rows.add(newdetailrow); //now can loop , print master row id , it's errortexts } thanks help
you need add column value change event in detail .
dtdetail.columnchanged += dtdetail_columnchanged; static void dtdetail_columnchanged(object sender, datacolumnchangeeventargs e) { if (e.column.columnname == "qty") { int sum = 0; // dtmaster.columns.add("totalqty" foreach(datarow row in ds.tables["detail"].rows) { if (row["qty"] != dbnull.value && convert.tostring(row["cid"]) != convert.tostring(e.row["cid"])) { sum += convert.toint32(row["qty"]); } } sum += convert.toint32(e.row["qty"]); ds.tables["master"].rows[0]["totalqty"] = sum; } }
Comments
Post a Comment