Hi,
I am using C# webmethod to provide data to Google line chart. However I am
stuck with the format of the data.
Currently I can only send data in "List<object>" format. But I want to send
data in DataTable format.
Is this possible?
Please find my code snippet below:
ASP Page
//call to get data from ASP web method
$.ajax({
type: "POST",
contentType: 'application/json',
data: '{}',
url: 'AdminDashboard.aspx/GetChartData',
beforeSend: function () { alert("before send"); },
complete: function () { alert("complete"); },
success: function (data) {
var linedata1 = new
google.visualization.arrayToDataTable(data.d);
linedata1.insertColumn(0, 'date',
linedata1.getColumnLabel(0));
// copy values from column 1 (old column 0) to column 0,
converted to Date
for (var i = 0; i < linedata1.getNumberOfRows() ; i++) {
var val = linedata1.getValue(i, 1);
if (val != '' && val != null) {
var dateArray = val.split('/');
var year = dateArray[2];
var month = dateArray[0] - 1; // convert to
javascript's 0-indexed months
var day = dateArray[1];
linedata1.setValue(i, 0, new Date(year, month,
day));
}
}
// remove column 1 (the old column 0)
linedata1.removeColumn(1);
dashboard.bind(programmaticSlider, programmaticChart);
dashboard.draw(linedata1);
}
ASP webmethod
[WebMethod]
public static List<object> GetChartData()
{
DataTable chartData = new DataTable();
DataTable tktData = new DataTable();
Array arrdata=null;
SPList configList, tktList;
SPQuery dataQuery;
SPListItemCollection configColl;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite oSite = new SPSite("http://dsknomoe11:9696/"))
{
using (SPWeb oWeb = oSite.OpenWeb())
{
//Get Config list value for Ticket Priority and
Ticket Status
configList =
oWeb.Lists.TryGetList("SCMS_Configuration");
dataQuery = new SPQuery();
dataQuery.Query = "<Where><Or><Eq><FieldRef
Name='Title' /><Value Type='Text'>Ticket Priority</Value></Eq><Eq><FieldRef
Name='Title' /><Value Type='Text'>Ticket Status</Value></Eq></Or></Where>";
configColl = configList.GetItems(dataQuery);
//Ticket Priority and status
foreach(SPListItem oItem in configColl)
{
//Get Ticket Priority
if (oItem["Title"].ToString().Equals("Ticket
Priority"))
{
tktPriority =
oItem["value"].ToString().Split(';');
}
//Get Ticket Status
else if
(oItem["Title"].ToString().Equals("Ticket Status"))
{
tktStatus =
oItem["value"].ToString().Split(';');
}
}
//Add columns to DataTable ChartData
foreach (string s in tktStatus)
{
chartData.Columns.Add(s);
}
//Get Config list value for Ticket Priority and
Ticket Status
tktList = oWeb.Lists.TryGetList("SCMS_Tickets");
dataQuery = new SPQuery();
dataQuery.Query = "<Where><Eq><FieldRef
Name='isAct' /><Value
Type='Choice'>Yes</Value></Eq></Where><OrderBy><FieldRef Name='Created'
Ascending='True' /></OrderBy><GroupBy Collapse='True'><FieldRef
Name='Created' /></GroupBy>";
dataQuery.ViewFields = "<FieldRef Name='Created'
/><FieldRef Name='tckPrty' /><FieldRef Name='tckStat' />";
dataQuery.ViewFieldsOnly = true;
tktData =
tktList.GetItems(dataQuery).GetDataTable();
var grpdata= tktData.AsEnumerable().Select(x => new
{ Date = Convert.ToDateTime(x[0]).Date.ToString("MM/dd/yyyy"), Status =
x[2] }).ToArray();
arrdata = grpdata.GroupBy(l => l.Date).Select(g =>
new
{
Date = g.Key,
Open = g.Count(l => (string)l.Status == "Open"),
Closed = g.Count(l => (string)l.Status ==
"Closed"),
InProgress = g.Count(l => (string)l.Status ==
"In-Progress"),
Total = g.Count(l => ((string)l.Status ==
"Open") || ((string)l.Status == "Closed") || ((string)l.Status ==
"In-Progress"))
}).ToArray();
}
}
});
List<object> list = new List<object>();
list.Add(new object[]
{"Date","Open","Closed","In-Progress","Total" });
string strDt, strOpen, strClosed, strInP, strTotal;
for (int i = 0; i < arrdata.Length; i++)
{
var spltData = arrdata.GetValue(i).ToString().Replace('{','
').Replace('}',' ').Split(',');
strDt = spltData[0];
strOpen = spltData[1];
strClosed = spltData[2];
strInP = spltData[3];
strTotal = spltData[4].Trim();
list.Add(new object[] {
Convert.ToDateTime(strDt.Split('=').Last()).Date.ToString("MM/dd/yyyy"),
Convert.ToInt32(strOpen.Split('=').Last()),
Convert.ToInt32(strClosed.Split('=').Last()),
Convert.ToInt32(strInP.Split('=').Last()),
Convert.ToInt32(strTotal.Split('=').Last())
});
}
return list;
}
Please help me with this.
1. My basic requirement is to create a datatable with dynamic columns and
then bind the data to google mutli-line chart.
For clarity, my current data format i.e list data is as
Date Open Closed InProgress1/2/13 2 0 02/2/13 1 2 03/3/13
0 0 14/3/13 0 1 0
--
You received this message because you are subscribed to the Google Groups
"Google Visualization API" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-visualization-api.
To view this discussion on the web visit
https://groups.google.com/d/msgid/google-visualization-api/6d9ee8b5-8f2e-4183-aef4-12d6312ceab5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.