来自外部来源的Google图表数据

时间:2016-03-13 17:17:55

标签: charts google-visualization

我正在使用C#webmethod向Google折线图提供数据。但是我坚持使用数据格式。

目前我只能以列表(对象)格式发送数据。但我想以其他格式发送数据。

这可能吗?请在下面找到我的代码段:

ASP页面

//调用从ASP Web方法获取数据

$.ajax({
            type: "POST",`enter code here`
            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;
        }

请帮我解决这个问题。 1.我的基本要求是使用动态列创建数据表/或任何其他格式,然后将数据绑定到google mutli-line chart。

For clarity, my current data format i.e list data is as 
Date    Open Closed InProgress
1/2/13  2    0      0
2/2/13  1    2      0
3/3/13  0    0      1
4/3/13  0    1      0

2 个答案:

答案 0 :(得分:0)

您可以以多种格式(JSON,CSV,TSV,HTML)提供数据,我强烈建议您使用JSON,您可以看到Google默认结构here

答案 1 :(得分:0)

我使用JSON格式工作。

我已经发布了片段,可能对某人有帮助。

//for dynamic data binding
            string jsonData = @"{ ""cols"" :[ {  ""label"" :  ""Type""  ,  ""type"" :  ""string"" },{ ""label"" :  ""Count""  ,  ""type"" :  ""number"" }], ""rows"" :[{""c"":[{""v"":""Mushrooms""},{""v"":3}]}," +
            @"{""c"":[{""v"":""Total""},{""v"":1}]}," +
            @"{""c"":[{""v"":""Open""},{""v"":1}]}," +
            @"{""c"":[{""v"":""Closed""},{""v"":1}]}," +
            @"{""c"":[{""v"":""In-Progress""},{""v"":2}]}]}";

捕获的是使用&#34;双引号&#34;为每一个价值。 JSON识别&#34;双引号&#34;。 感谢