ASP.NET MVC5+EF6+EasyUI 後臺管理系統(67)-MVC與ECharts

系列目錄

ECharts 特性介紹

ECharts,一個純 Javascript 的圖表庫,能夠流暢的運行在 PC 和移動設備上,兼容當前絕大部分瀏覽器(IE8/9/10/11,Chrome,Firefox,Safari等),底層依賴輕量級的 Canvas 類庫 ZRender,提供直觀,生動,可交互,可高度個性化定製的數據可視化圖表。javascript

ECharts 3 中更是加入了更多豐富的交互功能以及更多的可視化效果,而且對移動端作了深度的優化。html

豐富的圖表類型

ECharts 提供了常規的折線圖柱狀圖散點圖餅圖K線圖,用於統計的盒形圖,用於地理數據可視化的地圖熱力圖線圖,用於關係數據可視化的關係圖treemap,多維數據可視化的平行座標,還有用於 BI 的漏斗圖儀表盤,而且支持圖與圖之間的混搭。java

你能夠在下載界面下載包含全部圖表的構建文件,若是隻是須要其中一兩個圖表,又嫌包含全部圖表的構建文件太大,也能夠在在線構建中選擇須要的圖表類型後自定義構建。git

前言:

竟然在大百度搜索不到ASP.NET MVC與ECharts的結合使用!好吧....github

ECharts提供健全的幫助文檔,本節只演示其JSON的格式,MVC返回符合EChart適合的格式來動態顯示報表的展示。數據庫

ECharts的Json格式對於初學者來講是比較複雜的。其中包括多種形式,咱們能夠從下面Json格式看出,這只是一個簡單的柱狀圖api

可是複雜的圖形,其中幾個變化都離不開這種格式瀏覽器

var option = {
            title: {
                text: 'ECharts 入門示例'
            },
            tooltip: {},
            legend: {
                data:['銷量']
            },
            xAxis: {
                data: ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"]
            },
            yAxis: {},
            series: [{
                name: '銷量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };

 

開始

1.下載插件

我這裏下載的是完整的組件JS,下載成功並複製到項目下echarts

或者你須要更多的主題,那麼須要下載CSSdom

 

2.入門

使用必須引入下載的JS與主題樣式(除非你不想要主題)

<script src="@Url.Content("~/Scripts/echarts.min.js")"></script>
  <!-- 爲ECharts準備一個具有大小(寬高)的Dom -->
<div id="main"></div>

報表將展示在ID爲main的DIV內

優先初始化報表的對象,寫在$(function(){ });內

 var myChart = echarts.init(document.getElementById('main'));

3.柱狀圖

我這裏演示商品的售價和成本價的對比!代碼能夠下載58節代碼來一塊兒製做58節(包含了一張商品價格表),或者到文章結尾直接下載本節代碼!

利用EasyUI分頁動態顯示。當用戶點擊下一頁時候刷新ECharts數據

因此咱們必須在Datagrid加載成功時進行刷新

添加EasyUI加載成功的方法

 onLoadSuccess: function (data) {
                var grid = $('#List');
                var options = grid.datagrid('options');
                var m_page = options.pageNumber;
                var m_rows = options.pageSize;
                var m_sort = options.sortName;
                var m_order = options.sortOrder
                $.post("@Url.Action("GetOptionByBarChart")", { page: m_page, rows: m_rows, order: m_order, sort: m_sort }, function (option) {
                    // 使用剛指定的配置項和數據顯示圖表。
                    myChart.setOption(option);
                });
            },

得到當前頁碼,頁數,排序等屬性到後臺數據庫查詢數據

hmyChart.setOption(option); 加載報表從後臺得到的Json數據

根據ECahrts的Json格式得到對應的Json數據

包含的data實際上是個List,因此們必須在返回的數據中序列化其數據格式,固然你返回的數據必須都包含以上屬性

後臺方法:

 public JsonResult GetOptionByBarChart(GridPager pager, string queryStr)
        {
            List<Spl_ProductModel> list = m_BLL.GetList(ref pager, queryStr); List<decimal?> costPrice = new List<decimal?>(); list.ForEach(a => costPrice.Add(a.CostPrice)); List<decimal?> price = new List<decimal?>(); list.ForEach(a => price.Add(a.Price)); List<string> names= new List<string>(); list.ForEach(a=> names.Add(a. Name)); List<ChartSeriesModel> seriesList = new List<ChartSeriesModel>(); ChartSeriesModel series1 = new ChartSeriesModel() { name = "成本價", type = "bar", data = costPrice }; ChartSeriesModel series2 = new ChartSeriesModel() { name = "零售價", type = "bar", data = price }; seriesList.Add(series1); seriesList.Add(series2); var option= new { title= new{text= "成本價零售價對照表" }, tooltip= new{}, legend = new { data = "成本價零售價對照表" }, xAxis= new{ data= names}, yAxis= new{}, series = seriesList }; return Json(option); }

4.運行

數據正確咱們直接得出效果

5.總結

本節沒有過多的解析,你們下載源碼一看便知

其實其餘報表大同小異(如:hightcharts),咱們只要返回了其正確的JSon格式,就能展現報表

同理咱們能夠看到餅圖的數據

參考資料:http://echarts.baidu.com/demo.html

官方網站:http://echarts.baidu.com/index.html

API文檔:http://echarts.baidu.com/api.html#echarts

本節示例代碼下載   訪問密碼 69fd

代碼中修改Index.cshtml代碼:

 

@{
    ViewBag.Title = "主頁";
    Layout = "~/Views/Shared/_Index_Layout.cshtml";

}
<script src="~/Scripts/echarts.min.js"></script>
  <!-- 爲ECharts準備一個具有大小(寬高)的Dom -->
<div id="main"></div>


<table id="List"></table>
<div id="modalwindow" class="easyui-window" data-options="modal:true,closed:true,minimizable:false,shadow:false"></div>
<script type="text/javascript">
    $(function () {
        $('#List').datagrid({
            url: '@Url.Action("GetList")',
            width: SetGridWidthSub(10),
            methord: 'post',
            height: $(window).height()/2-30,
            fitColumns: true,
            sortName: 'CreateTime',
            sortOrder: 'desc',
            idField: 'Id',
            pageSize: 15,
            pageList: [15, 20, 30, 40, 50],
            pagination: true,
            striped: true, //奇偶行是否區分
            singleSelect: true,//單選模式
            remoteFilter:true,
            //rownumbers: true,//行號
            onLoadSuccess: function (data) {
                var grid = $('#List');
                var options = grid.datagrid('options');
                var m_page = options.pageNumber;
                var m_rows = options.pageSize;
                var m_sort = options.sortName;
                var m_order = options.sortOrder
                $.post("@Url.Action("GetOptionByBarChart")", { page: m_page, rows: m_rows, order: m_order, sort: m_sort }, function (option) {
                    // 使用剛指定的配置項和數據顯示圖表。
                    myChart.setOption(option);
                });
            },
            columns: [[
                { field: 'Id', title: 'Id', width: 80,hidden:true},
                { field: 'Name', title: '產品名稱', width: 80, sortable: true },
                { field: 'Code', title: '產品代碼', width: 80, sortable: true },
                { field: 'Price', title: '產品價格', width: 80, sortable: true },
                { field: 'Color', title: '產品顏色', width: 80, sortable: true },
                { field: 'Number', title: '產品數量', width: 80, sortable: true },
                {
                    field: 'CategoryId', title: '類別', width: 80, sortable: true, formatter: function (value, row, index) {
                        return row.ProductCategory;
                    }
                },
                { field: 'ProductCategory', title: '類別', width: 80, sortable: true,hidden:true },
                { field: 'CreateTime', title: 'CreateTime', width: 80, sortable: true },
                { field: 'CreateBy', title: 'CreateBy', width: 80, sortable: true }
            ]]
        });

        // 基於準備好的dom,初始化echarts實例
        $("#main").width($(window).width()-10).height($(window).height() / 2 - 10);
        var myChart = echarts.init(document.getElementById('main'));

    });
</script>
View Code
相關文章
相關標籤/搜索