Wednesday 15 April 2015

c# - Customizing tables returned from Google.DataTable.Net.Wrapper with Format -



c# - Customizing tables returned from Google.DataTable.Net.Wrapper with Format -

i making custom study using google visualization api. have 6 sections each section having tables on either side , chart in middle.

since formats differ spending lot of time defining classes each one-off case.

i decided seek google.datatable.net.wrapper 3.1.0.0.

i created stored procedure returns dataset , walk through dataset in controller , pass each table need.

the info looks this

rownum charttypeid charttypename ----------- ----------- ------------------ 1 1 membership sales rownum chartareaid chartareaname ----------- ----------- ------------------------- 1 1 membership sales overview 2 2 membership sales chart title value display ------------------------- ----------- ---------- # of walk-ins 25 25 # of tours 17 17 # of new members 35 35 tour conversion 78 78% percent goal 87 87% month value display goalvalue goaldisplay ----- ----------- ---------- ----------- ----------- sep 3125 $3,125.00 1500 $1,500.00 oct 4500 $4,500.00 1500 $1,500.00

sometimes charts have money formats or other display formats, dates etc. can't figure out how add/modify "f" part of cell provides string format display. controller code looks this

[responsetype(typeof(list<chartpanel>))] public ihttpactionresult getchart(int gym, string datecategory, string iso8601date, int id = -1) { if (!string.isnullorwhitespace(datecategory)) { datecategory = datecategory.tolower(); string strconnstring = configurationmanager.connectionstrings["primarydbconnection"].connectionstring; // homecoming dataset usp dataset dashboarddataset = getdatasql(strconnstring, gym, datecategory, iso8601date, 0); if (dashboarddataset != null) { int chartpanelcount = dashboarddataset.tables[0].rows.count; list<chartpanel> charttypelist = new list<chartpanel>(); // list panels // first table describes chart panels int tablecount = 0; (int chartpanelloop = 0; chartpanelloop < chartpanelcount; chartpanelloop++) { // every panel tablecount++; chartpanel chartpanel = new chartpanel(); chartpanel.name = dashboarddataset.tables[0].rows[chartpanelloop][2].tostring(); // sec table describes next chart areas panel int panelareacount = dashboarddataset.tables[1].rows.count; list<chartarea> chartarealist = new list<chartarea>(); int areatablecount = tablecount; (int panelarealoop = 0; panelarealoop < panelareacount; panelarealoop++) { // every area int areatable = areatablecount; chartarea chartarea = new chartarea(); chartarea.name = dashboarddataset.tables[areatable].rows[panelarealoop][2].tostring(); int chartarearownum = panelarealoop + 1; system.data.datatable systdt = new system.data.datatable(); systdt = dashboarddataset.tables[areatable + chartarearownum]; var dt = systdt.togoogledatatable(); //convert wrapper //issue ==> //dt = removecolumnswithtitlelikedisplayandpasscellcontentsasformattedstringtopreviouscell(dt); chartarea.table = jsonconvert.deserializeobject(dt.getjson()); chartarealist.add(chartarea); //} if (chartarealist.count() > 0) chartpanel.areas = chartarealist; tablecount++; } if (chartpanel.areas != null && chartpanel.areas.count() > 0) charttypelist.add(chartpanel); } homecoming ok(charttypelist); } else { homecoming notfound(); } } else { homecoming notfound(); } }

is there improve way this?

figured out. here working code hack column (colname.contains("_display")) , create formatted ("f") info previous column.

to map column formatting column made custom class.

custom class class columndisplaymap { public int columntoformat { get; set; } public int formatcolumn { get; set; } } method building charts [responsetype(typeof(list<chartpanel>))] public ihttpactionresult getchart(int gym, string datecategory, string iso8601date, int id = -1) { if (!string.isnullorwhitespace(datecategory)) { datecategory = datecategory.tolower(); string strconnstring = configurationmanager.connectionstrings["primarydbconnection"].connectionstring; // homecoming dataset usp dataset dashboarddataset = getdatasql(strconnstring, gym, datecategory, iso8601date, 0); if (dashboarddataset != null) { int chartpanelcount = dashboarddataset.tables[0].rows.count; list<chartpanel> charttypelist = new list<chartpanel>(); // list panels // first table describes chart panels int tablecount = 0; (int chartpanelloop = 0; chartpanelloop < chartpanelcount; chartpanelloop++) { // every panel chartpanel chartpanel = new chartpanel(); chartpanel.name = dashboarddataset.tables[0].rows[chartpanelloop][2].tostring(); // sec table describes next chart areas panel datarow[] areatablerows = dashboarddataset.tables[1].select("charttype = " + (chartpanelloop + 1).tostring()); int panelareacount = areatablerows.count(); list<chartarea> chartarealist = new list<chartarea>(); (int panelarealoop = 0; panelarealoop < panelareacount; panelarealoop++) { // every area int areatable = 1; chartarea chartarea = new chartarea(); chartarea.name = areatablerows[panelarealoop][3].tostring(); // dashboarddataset.tables[areatable].rows[panelarealoop][3].tostring(); datacolumncollection columns = dashboarddataset.tables[areatable + tablecount + 1].columns; datarowcollection rows = dashboarddataset.tables[areatable + tablecount + 1].rows; google.datatable.net.wrapper.datatable gdt = new google.datatable.net.wrapper.datatable(); list<columndisplaymap> cmap = new list<columndisplaymap>(); foreach (datacolumn col in columns) { string colname = col.tostring(); if (!colname.contains("_display")) { columntype type = columntype.number; if (!col.isnumeric()) type = columntype.string; gdt.addcolumn(new column(type, col.tostring(), col.tostring())); }else { columndisplaymap cdm = new columndisplaymap(){columntoformat = col.ordinal - 1, formatcolumn = col.ordinal}; cmap.add(cdm); } } foreach (datarow row in rows) { var r = gdt.newrow(); (int cellitem = 0; cellitem < row.itemarray.count(); cellitem++) { if (cmap.any(c => c.columntoformat.equals(cellitem))) { r.addcell(new cell(row.itemarray[cellitem], row.itemarray[cellitem + 1].tostring())); } else if (cmap.any(c => c.formatcolumn.equals(cellitem))) { // nil } else { r.addcell(new cell(row.itemarray[cellitem], row.itemarray[cellitem].tostring())); } } gdt.addrow(r); } chartarea.table = jsonconvert.deserializeobject(gdt.getjson()); chartarealist.add(chartarea); //} if (chartarealist.count() > 0) chartpanel.areas = chartarealist; tablecount++; } if (chartpanel.areas != null && chartpanel.areas.count() > 0) charttypelist.add(chartpanel); } homecoming ok(charttypelist); } else { homecoming notfound(); } } else { homecoming notfound(); } }

c# google-visualization system.data.datatable

No comments:

Post a Comment