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

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -