asp.net使用echarts展示图表数据

简介: 百度echarts开发插件包下载地址:http://download.csdn.net/detail/taomanman/8850699 Echart图表...

百度echarts开发插件包下载地址:http://download.csdn.net/detail/taomanman/8850699





<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EchartDemo.aspx.cs" Inherits="AT.Web.Demo.EchartDemo" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Echart图表示例</title>
    <script src="../Themes/Scripts/jquery-1.8.2.min.js"></script>
    <link href="../Themes/Styles/Site.css" rel="stylesheet" type="text/css" />
    <script src="../Themes/Scripts/FunctionJS.js" type="text/javascript"></script>
    <script type="text/javascript">
        //初始化
        $(function () {
            $('#table2').hide();
        })
        //点击切换面板
        var IsFixedTableLoad = 1;
        function panel(obj) {
            if (obj == 1) {
                $('#table1').show();
                $('#table2').hide();
            } else if (obj == 2) {
                $('#table1').hide();
                $("#table2").show();
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div class="frmtop">
            <table style="padding: 0px; margin: 0px; height: 100%;" cellpadding="0" cellspacing="0">
                <tr>
                    <td id="menutab" style="vertical-align: bottom;">
                        <div id="tab0" class="Tabsel" onclick="GetTabClick(this);panel(1)">
                            能耗动态
                        </div>
                        <div id="tab1" class="Tabremovesel" onclick="GetTabClick(this);panel(2);">
                            填报动态
                        </div>
                    </td>
                </tr>
            </table>
        </div>
        <div class="div-frm" style="height: 275px;">
            <%--能耗动态--%>
            <div id="table1">
                <div id="divEnergy" style="width: 610px; height: 220px;"></div>
            </div>
            <%--填报动态--%>
            <div id="table2">
                <div id="divReport" style="width: 750px; height: 250px;"></div>
            </div>
        </div>
    </form>
</body>
</html>
<script src="../Themes/Scripts/echarts/echarts.js"></script>
<script src="../Themes/Scripts/echarts/theme/macarons.js"></script>
<script type="text/javascript">
    var cityClick = '';
    function GetUnitEnergy(unitName) {
        GetCityEnergy(unitName, 2);
    }
    require.config({
        paths: {
            echarts: '../Themes/Scripts/echarts'
        }
    });
    require(
        [
            'echarts',
            'echarts/chart/bar',
            'echarts/chart/line',
            'echarts/chart/pie',
            'echarts/chart/funnel'
        ],
        DrawEChart //异步加载的回调函数绘制图表
    );
    var myEnergyChart;

    var myReportChart;

    //创建ECharts图表方法
    function DrawEChart(ec) {
        //--- 折柱 ---
        myEnergyChart = ec.init(document.getElementById('divEnergy'), macarons);
        //定义图表options
        var options = {
            title: {
                text: "",
                subtext: ""
            },
            /*color: ['#0099FF', '#00CC00', '#008080', '#CC6600', '#CC00CC', '#0033CC','#003300', '#FF0000'],*/
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: [" "]
            },
            toolbox: {
                show: true,
                feature: {
                    mark: { show: false },
                    dataView: { show: false, readOnly: false },
                    magicType: { show: true, type: ['line', 'bar'] },
                    restore: { show: true },
                    saveAsImage: { show: false }
                }
            },
            grid: {
                x: 60,
                y: 30,
                x2: 5,
                y2: 30
            },
            calculable: true,
            xAxis: [
                {
                    type: 'category',
                    data: [" "]
                }
            ],
            yAxis: [
                {
                    type: 'value',
                    axisLabel: {
                        fomatter: "."
                    },
                    splitArea: { show: true }
                }
            ],
            series: [{
                name: " ",
                type: "line",
                data: [0]
            }]
        };
        //选择一个空图表
        myEnergyChart.setOption(options);
        myReportChart = ec.init(document.getElementById('divReport'), macarons);
        //选择一个空图表
        myReportChart.setOption(options);

        // 默认加载填报
        GetReport("1");
        // 默认加载省直
        GetUnitEnergy('34');
    }


    ///点击按钮获取图表数据采用ajax方式
    function GetCityEnergy(cityCode, level) {
        //获得图表的options对象
        var options = myEnergyChart.getOption();
        //通过Ajax获取数据
        $.ajax({
            type: "post",
            async: false, //同步执行
            url: "GetChartData.aspx?type=energyData",
            dataType: "json", //返回数据形式为json
            success: function (result) {
                if (result) {
                    //将返回的category和series对象赋值给options对象内的category和series
                    //因为xAxis是一个数组 这里需要是xAxis[i]的形式
                    options.xAxis[0].data = result.category;
                    options.series = result.series;
                    options.legend.data = result.legend;
                    myEnergyChart.setOption(options);
                    myEnergyChart.refresh();
                }
            },
            error: function (errorMsg) {
                alert("图表数据加载失败!");
            }
        });
    }

    ///点击按钮获取图表数据采用ajax方式
    function GetReport(code) {
        //获得图表的options对象
        var options = myReportChart.getOption();
        //通过Ajax获取数据
        $.ajax({
            type: "post",
            async: false, //同步执行
            url: "GetChartData.aspx?type=reportData",
            dataType: "json", //返回数据形式为json
            success: function (result) {
                if (result) {
                    //将返回的category和series对象赋值给options对象内的category和series
                    //因为xAxis是一个数组 这里需要是xAxis[i]的形式
                    //myReportChart.clear();
                    options.xAxis[0].data = result.category;
                    options.series = result.series;
                    options.legend.data = result.legend;
                    myReportChart.setOption(options);
                }
            },
            error: function (errorMsg) {
                alert("图表数据加载失败!");
            }
        });
    }

    //初始加载图表数据
    $(function () {
        GetCityEnergy("", "");
        GetUnitEnergy("");
    });
</script>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AT.Web.Demo
{
    public partial class EchartDemo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetChartData.aspx.cs" Inherits="AT.Web.Demo.GetChartData" %>

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AT.Web.Demo
{
    public partial class GetChartData : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string type = Request["type"];
            if (!string.IsNullOrEmpty(type))
            {
                switch (type)
                {
                    case "energyData":
                        GetEnergyDataAjaxData("", "");
                        break;
                    case "reportData":
                        GetReportDataAjaxData("");
                        break;
                }
            }
        }

        /// <summary>
        /// 获得数据且用Json格式数据返回
        /// </summary>
        private void GetEnergyDataAjaxData(string level, string code)
        {
            //考虑到图表的category是字符串数组 这里定义一个string的List
            List<string> categoryList = new List<string>();
            //考虑到图表的series数据为一个对象数组 这里额外定义一个series的类
            List<Series> seriesList = new List<Series>();

            //考虑到Echarts图表需要设置legend内的data数组为series的name集合这里需要定义一个legend数组
            List<string> legendList = new List<string>();

            DataTable dt = null;
            using (SqlConnection con = new SqlConnection("Data Source=.;User ID=sa;Password=111111;Database=AT_DB;"))
            {
                string strSQL = "select top 12 * from T_EchartData1";
                using (SqlDataAdapter adapter = new SqlDataAdapter(strSQL, con))
                {
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);
                    dt = ds.Tables[0];
                }
            }
            //Response.Write(dt.Rows.Count+"条数据!");
            //设置legend数组
            legendList.Add("今年能耗"); //这里的名称必须和series的每一组series的name保持一致
            legendList.Add("去年能耗"); //这里的名称必须和series的每一组series的name保持一致


            Series thisSeriesObj = new Series();
            thisSeriesObj.id = 0;
            thisSeriesObj.name = "今年能耗";
            thisSeriesObj.type = "line"; //线性图呈现
            thisSeriesObj.data = new List<object>();
            thisSeriesObj.itemStyle = new itemStyle { normal = new normal { color = "#0099FF" } };
            Series lastSeriesObj = new Series();
            lastSeriesObj.id = 1;
            lastSeriesObj.name = "去年能耗";
            lastSeriesObj.type = "line"; //线性图呈现
            lastSeriesObj.data = new List<object>();
            lastSeriesObj.itemStyle = new itemStyle { normal = new normal { color = "#00CC00" } };
            foreach (DataRow dr in dt.Rows)
            {
                categoryList.Add(dr[0].ToString() + "月");
                thisSeriesObj.data.Add(dr[1]);
                lastSeriesObj.data.Add(dr[2]);
            }
            //将sereis对象压入sereis数组列表内
            seriesList.Add(thisSeriesObj);
            seriesList.Add(lastSeriesObj);

            //最后调用相关函数将List转换为Json
            //因为我们需要返回category和series、legend多个对象 这里我们自己在new一个新的对象来封装这两个对象
            var newObj = new
            {
                category = categoryList,
                series = seriesList,
                legend = legendList
            };
            //Response返回新对象的json数据
            Response.Write(JsonConvert.SerializeObject(newObj, Formatting.None));
            Response.End();
        }

        /// <summary>
        /// 获得数据且用Json格式数据返回
        /// </summary>
        private void GetReportDataAjaxData(string code)
        {
            //考虑到图表的category是字符串数组 这里定义一个string的List
            List<string> categoryList = new List<string>();
            //考虑到图表的series数据为一个对象数组 这里额外定义一个series的类
            List<Series> seriesList = new List<Series>();

            //考虑到Echarts图表需要设置legend内的data数组为series的name集合这里需要定义一个legend数组
            List<string> legendList = new List<string>();

            DataTable dt = null;
            using (SqlConnection con = new SqlConnection("Data Source=.;User ID=sa;Password=111111;Database=AT_DB;"))
            {
                string strSQL = "select * from T_EchartData2";
                using (SqlDataAdapter adapter = new SqlDataAdapter(strSQL, con))
                {
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);
                    dt = ds.Tables[0];
                }
            }
            //Response.Write(dt.Rows.Count + "条数据!");
            //设置legend数组
            legendList.Add("电"); //这里的名称必须和series的每一组series的name保持一致
            legendList.Add("水"); //这里的名称必须和series的每一组series的name保持一致
            legendList.Add("燃煤"); //这里的名称必须和series的每一组series的name保持一致
            legendList.Add("天然气"); //这里的名称必须和series的每一组series的name保持一致
            legendList.Add("汽油"); //这里的名称必须和series的每一组series的name保持一致
            legendList.Add("柴油"); //这里的名称必须和series的每一组series的name保持一致
            legendList.Add("热力"); //这里的名称必须和series的每一组series的name保持一致
            legendList.Add("其他"); //这里的名称必须和series的每一组series的name保持一致


            Series dianSeries = new Series();
            dianSeries.id = 0;
            dianSeries.name = "电";
            dianSeries.type = "line"; //线性图呈现
            dianSeries.data = new List<object>();
            dianSeries.itemStyle = new itemStyle { normal = new normal { color = "#0099FF" } };
            Series shuiSeries = new Series();
            shuiSeries.id = 1;
            shuiSeries.name = "水";
            shuiSeries.type = "line"; //线性图呈现
            shuiSeries.data = new List<object>();
            shuiSeries.itemStyle = new itemStyle { normal = new normal { color = "#00CC00" } };
            Series yuanmeiSeries = new Series();
            yuanmeiSeries.id = 2;
            yuanmeiSeries.name = "燃煤";
            yuanmeiSeries.type = "line"; //线性图呈现
            yuanmeiSeries.data = new List<object>();
            yuanmeiSeries.itemStyle = new itemStyle { normal = new normal { color = "#008080" } };
            Series tianranqiSeries = new Series();
            tianranqiSeries.id = 3;
            tianranqiSeries.name = "天然气";
            tianranqiSeries.type = "line"; //线性图呈现
            tianranqiSeries.data = new List<object>();
            tianranqiSeries.itemStyle = new itemStyle { normal = new normal { color = "#CC6600" } };
            Series qiyouSeries = new Series();
            qiyouSeries.id = 4;
            qiyouSeries.name = "汽油";
            qiyouSeries.type = "line"; //线性图呈现
            qiyouSeries.data = new List<object>();
            qiyouSeries.itemStyle = new itemStyle { normal = new normal { color = "#CC00CC" } };
            Series chaiyouSeries = new Series();
            chaiyouSeries.id = 5;
            chaiyouSeries.name = "柴油";
            chaiyouSeries.type = "line"; //线性图呈现
            chaiyouSeries.data = new List<object>();
            chaiyouSeries.itemStyle = new itemStyle { normal = new normal { color = "#0033CC" } };
            Series reliSeries = new Series();
            reliSeries.id = 6;
            reliSeries.name = "热力";
            reliSeries.type = "line"; //线性图呈现
            reliSeries.data = new List<object>();
            reliSeries.itemStyle = new itemStyle { normal = new normal { color = "#003300" } };
            Series qitaSeries = new Series();
            qitaSeries.id = 7;
            qitaSeries.name = "其他";
            qitaSeries.type = "line"; //线性图呈现
            qitaSeries.data = new List<object>();
            qitaSeries.itemStyle = new itemStyle { normal = new normal { color = "#FF0000" } };
            foreach (DataRow dr in dt.Rows)
            {
                categoryList.Add(string.Format("{0}年{1}月", dr["ReportYear"], dr["ReportMonth"]));
                dianSeries.data.Add(string.IsNullOrEmpty(dr["DIAN"].ToString()) ? 0 : dr["DIAN"]);
                shuiSeries.data.Add(string.IsNullOrEmpty(dr["SHUI"].ToString()) ? 0 : dr["SHUI"]);
                yuanmeiSeries.data.Add(string.IsNullOrEmpty(dr["YUANMEI"].ToString()) ? 0 : dr["YUANMEI"]);
                tianranqiSeries.data.Add(string.IsNullOrEmpty(dr["TIANRQ"].ToString()) ? 0 : dr["TIANRQ"]);
                qiyouSeries.data.Add(string.IsNullOrEmpty(dr["QIYOU"].ToString()) ? 0 : dr["QIYOU"]);
                chaiyouSeries.data.Add(string.IsNullOrEmpty(dr["CHAIYOU"].ToString()) ? 0 : dr["CHAIYOU"]);
                reliSeries.data.Add(string.IsNullOrEmpty(dr["RELI"].ToString()) ? 0 : dr["RELI"]);
                qitaSeries.data.Add(string.IsNullOrEmpty(dr["QTNY"].ToString()) ? 0 : dr["QTNY"]);
            }
            //将sereis对象压入sereis数组列表内
            seriesList.Add(dianSeries);
            seriesList.Add(shuiSeries);
            seriesList.Add(yuanmeiSeries);
            seriesList.Add(tianranqiSeries);
            seriesList.Add(qiyouSeries);
            seriesList.Add(chaiyouSeries);
            seriesList.Add(reliSeries);
            seriesList.Add(qitaSeries);

            //最后调用相关函数将List转换为Json
            //因为我们需要返回category和series、legend多个对象 这里我们自己在new一个新的对象来封装这两个对象
            var newObj = new
            {
                category = categoryList,
                series = seriesList,
                legend = legendList
            };
            //Response返回新对象的json数据
            Response.Write(JsonConvert.SerializeObject(newObj, Formatting.None));
            Response.End();
        }
    }
    /// <summary>
    /// 定义一个Series类 设置其每一组sereis的一些基本属性
    /// </summary>
    class Series
    {
        /// <summary>
        /// sereis序列组id
        /// </summary>
        public int id
        {
            get;
            set;
        }

        /// <summary>
        /// series序列组名称
        /// </summary>
        public string name
        {
            get;
            set;
        }

        /// <summary>
        /// series序列组呈现图表类型(line、column、bar等)
        /// </summary>
        public string type
        {
            get;
            set;
        }

        /// <summary>
        /// series序列组的itemstyle
        /// </summary>
        public object itemStyle
        {
            get;
            set;
        }
        /// <summary>
        /// series序列组的数据为数据类型数组
        /// </summary>
        public List<object> data
        {
            get;
            set;
        }
    }

    class normal
    {
        /// <summary>
        /// color
        /// </summary>
        public string color
        {
            get;
            set;
        }
    }

    class itemStyle
    {
        /// <summary>
        /// normal
        /// </summary>
        public object normal
        {
            get;
            set;
        }
    }
}



相关文章
|
2月前
|
小程序 前端开发 JavaScript
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
64 1
|
2月前
|
JavaScript
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
270 0
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
3月前
|
Web App开发 数据可视化 前端开发
Echart的使用初体验,Echarts的基本使用及语法格式,简单图表绘制和使用及图例添加【学习笔记】
本文介绍了ECharts的基本使用和语法格式,包括如何引入ECharts、创建容器、初始化echarts实例对象、配置option参数和一些基础图表的绘制方法。文章还提供了简单图表绘制和使用图例添加的示例代码,以及对ECharts特性和优势的概述。
Echart的使用初体验,Echarts的基本使用及语法格式,简单图表绘制和使用及图例添加【学习笔记】
|
4月前
|
小程序 JavaScript
微信小程序使用echarts图表(ec-canvas)
这篇文章介绍了在微信小程序中使用`ec-canvas`集成echarts图表的方法,包括解决加载时报错的问题、配置图表组件、以及在小程序页面中引入和使用这些图表组件的步骤。
497 1
微信小程序使用echarts图表(ec-canvas)
|
4月前
|
前端开发 数据可视化 JavaScript
Echarts如何实现多图表缩放和自适应?附源码
Echarts如何实现多图表缩放和自适应?附源码
Echarts如何实现多图表缩放和自适应?附源码
|
4月前
|
开发框架 .NET 数据库连接
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
|
4月前
|
XML SQL JavaScript
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
这篇文章介绍了如何在Vue页面中结合SpringBoot、MyBatis、ElementUI和ECharts,实现从数据库获取数据并展示为图表的过程,包括前端和后端的代码实现以及遇到的问题和解决方法。
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
|
4月前
Echarts——如何默认选中图表并显示tooltip
Echarts——如何默认选中图表并显示tooltip
64 1
|
4月前
|
JavaScript
Echarts——VUE中非根节点时不显示图表也无报错
Echarts——VUE中非根节点时不显示图表也无报错
38 1

热门文章

最新文章