1. 程式人生 > >ECharts 從後臺動態獲取資料 (asp.net)

ECharts 從後臺動態獲取資料 (asp.net)

(一) 使用工具 visual studio 2017;Web開發:asp.net

(程式碼中的js引用路徑以及ajax方法呼叫的url,記得修改哦)

(二) 準備工作(此處寫給和我一樣小白)

  1.動態從後臺獲取資料,需使用Ajax獲取後臺Json,為此我們需要做一些準備工作,安裝兩個包(在vs的NuGet包管理)

一個json的包,一個mvc的包。

  2.新增必要的js。

  ECharts和jQuery均可在各自官網下載到。Echarts依賴zrender,但好像專案中是否引用並不影響。原諒我對Echarts還只是初識,理解不夠深刻。

 

 

(三) 開始吧~

然後現在開始我們的小練習。

先準備一個Series類

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 
 6 /// <summary>
 7 /// Series 的摘要說明
 8 /// </summary>
 9 public class Series
10 {
11     public string name;
12     public string type;
13     public
int yAxisIndex; 14 public List<double> data; 15 }
Series

 

然後我們新增一個web服務

 

 

         是的,就是這個~ 我給的名字叫 wsComm

(VS很智慧的告訴我要取消如下注釋,然而我一開始仍然沒有看到,瞎了大概)

 

 然後我們需要在這裡面寫一個webmethod,以便在前臺進行資料獲取(關於webmethod的問題,這裡不做詳述)。

 1 /// <summary>
 2 /// wsComm 的摘要說明
 3 /// </summary>
 4 [WebService(Namespace = "http://tempuri.org/")]
 5 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 6 // 若要允許使用 ASP.NET AJAX 從指令碼中呼叫此 Web 服務,請取消註釋以下行。 
 7 [System.Web.Script.Services.ScriptService]
 8 public class wsComm : System.Web.Services.WebService
 9 {
10 
11     /// <summary>
12     /// ECharts圖表資料獲取
13     /// </summary>
14     /// <returns></returns>
15     [WebMethod]
16     public JsonResult getdataechart()
17     {
18         //考慮到圖表的category是字串陣列 這裡定義一個string的List
19         List<string> categoryList = new List<string>();
20         //考慮到Echarts圖表需要設定legend內的data陣列為series的name集合這裡需要定義一個legend陣列
21         List<string> legendList = new List<string>();
22         //考慮到圖表的series資料為一個物件陣列 這裡額外定義一個series的類
23         List<Series> seriesList = new List<Series>();
24         //設定legend陣列
25         legendList.Add("月支出金額"); //這裡的名稱必須和series的每一組series的name保持一致
26         legendList.Add("月工作量"); //這裡的名稱必須和series的每一組series的name保持一致
27         //填寫第一個Series
28         //定義一個Series物件
29         Series seriesObj = new Series();
30         seriesObj.name = "月支出金額";
31         seriesObj.type = "line"; //線性圖呈現
32         seriesObj.data = new List<double>(); //先初始化 不初始化後面直直接data.Add(x)會報錯       
33 
34         //模擬兩組資料,都放在二組陣列中。該資料你可以從資料庫中獲取,關於如何從後臺資料庫進行讀取,本文不再詳述。
35         string[,] MonthCost = new string[,] { { "201701", "10110020" }, { "201702", "2000000" }, { "201703", "3500000" }, { "201704", "4590876" }, { "201705", "5809833" }, { "201706", "5309902" }, { "201707", "7388332" }, { "201708", "2000000" }, { "201709", "19879802" }, { "2017010", "2378945" } };
36         string[,] ProjectVal = new string[,] { { "201701", "3000" }, { "201702", "7500" }, { "201703", "9500" }, { "201704", "10000" }, { "201705", "12000" }, { "201706", "10050" }, { "201707", "30050" }, { "201708", "7893" }, { "201709", "7312" }, { "2017010", "8905" } };
37         //設定資料        
38         for (int i = 0; i < 10; i++)
39         {
40             //加入category刻度陣列
41             categoryList.Add(MonthCost[i, 0]);
42             //加入資料值series序列陣列 這裡提供為了效果只提供一組series資料好了                
43             seriesObj.data.Add(Convert.ToDouble(MonthCost[i, 1])); //資料依次遞增
44         }
45         seriesList.Add(seriesObj);
46         //填寫第二個Series
47         seriesObj = new Series();
48         seriesObj.name = "月工作量";
49         seriesObj.type = "bar"; //線性圖呈現
50         seriesObj.yAxisIndex = 1;
51         seriesObj.data = new List<double>(); //先初始化 不初始化後面直直接data.Add(x)會報錯       
52         //設定資料        
53         for (int i = 0; i < 10; i++)
54         {
55             seriesObj.data.Add(Convert.ToDouble(ProjectVal[i, 1])); //資料依次遞增
56         }
57         seriesList.Add(seriesObj);
58         //最後呼叫相關函式將List轉換為Json
59         //因為我們需要返回category和series、legend多個物件 這裡我們自己在new一個新的物件來封裝這兩個物件
60         JsonResult json = new JsonResult();
61         var newObj = new
62         {
63             category = categoryList,
64             series = seriesList,
65             legend = legendList
66         };
67         json.Data = JsonConvert.SerializeObject(newObj);
68         return json;
69     }
70 }
wsComm

 

  前臺:

 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head runat="server">
 3     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 4     <script type="text/jscript" src="../JS/jquery-3.3.1.js"></script>
 5     <script type="text/jscript" src="../JS/echarts.js"></script>
 6     <title></title>
 7 </head>
 8 <body>
 9     <form id="form1" runat="server">
10         <div id="main" style="height: 400px"></div>
11         <script type="text/javascript">
12             var myChart = echarts.init(document.getElementById('main'));
13             //圖表顯示提示資訊
14             myChart.showLoading({
15                 text: "圖表資料正在努力載入..."
16             });
17             //定義圖表options
18             var options = {
19                 title: {
20                     text: "測試報表1",
21                 },
22                 //右側工具欄
23                 toolbox: {
24                     show: true,
25                     feature: {
26                         mark: { show: true },
27                         dataView: { show: true, readOnly: false },
28                         magicType: { show: true, type: ['line', 'bar'] },
29                         restore: { show: true },
30                         saveAsImage: { show: true }
31                     }
32                 },
33                 tooltip: {
34                     trigger: 'axis'
35                 },
36                 legend: {
37                     data: []
38                 },
39                 calculable: true,
40                 xAxis: [
41                     {
42                         type: 'category',
43                         name: '月份',
44                         data: []
45                     }
46                 ],
47                 yAxis: [
48                     {
49                         type: 'value',
50                         name: '金額',
51                         axisLabel: {
52                             formatter: '{value} Y'
53                         },
54                         splitArea: { show: true }
55                     },
56                     {
57                         type: 'value',
58                         name: '工作量',
59                         axisLabel: {
60                             formatter: '{value} M3'
61                         },
62                         splitArea: { show: true }
63                     }
64                 ],
65                 series: []
66             };
67             //通過Ajax獲取資料
68             $.ajax({
69                 type: "POST",
70                 async: false,
71                 contentType: 'application/json; charset=utf-8',
72                 url: "../wsComm.asmx/getdataechart",
73                 dataType: "json", //返回資料形式為json
74                 success: function (result) {
75                     var obj = JSON.parse(result.d.Data); //一定要注意大小寫,本語句中,一直把Data寫成data,總是取不出資料,耽誤了半天        
76                     if (result) {
77                         //將返回的category和series物件賦值給options物件內的category和series
78                         //因為xAxis是一個數組 這裡需要是xAxis[i]的形式
79                         options.yAxis[0].data = obj.value;
80                         options.xAxis[0].data = obj.category;
81                         options.series= obj.series;
82                         options.legend.data = obj.legend;
83                         myChart.hideLoading();
84                         myChart.setOption(options);
85                     }
86                 },
87                 error: function (XMLHttpRequest, textStatus, errorThrown) {
88                     alert(XMLHttpRequest.responseText);
89                     alert(XMLHttpRequest.status);
90                     alert(XMLHttpRequest.readyState);
91                     alert(textStatus);
92                 }
93             });
94         </script>
95     </form>
96 </body>
97 </html>
html

 

 

嗯,然後就完成了。

參考原文:https://blog.csdn.net/guoxy_nb/article/details/78943185