FusionCharts--加载json文件

本文主要讲解如何使用FusionCharts通过JSON数据来展示图表,包括后台获取数据并转化为JSON格式,以及前端通过AJAX异步加载。示例展示了3D柱状图的效果,并指出JSON格式需符合FusionCharts的要求。
摘要由CSDN通过智能技术生成

   上篇介绍了FusionCharts加载XML文件,这篇将介绍另一种加载方式,使用json串。通常我们在前台使用ajax来异步加载后台的数据,后台处理table数据,转换成json,这样就可以将数据展现给用户。具体的过程如下:

   首先说一下后台获取数据及将数据转换成json格式:     

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.OracleClient;
namespace FusionCharts
{
    /// <summary>
    /// getData 的摘要说明
    /// </summary>
    public class getData : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

            context.Response.Write(getAllData(context));
        }

        /// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="context"></param>
        /// <returns>json串</returns>
        public string getAllData(HttpContext context)
        {
            string test = "";
            string connString = @"Data Source=  
                   (DESCRIPTION=  
                   (ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))  
                   (CONNECT_DATA=  
                   (SERVICE_NAME=ORCL)));  
                   User Id=drp;Password=drp";

            try
            {
                OracleConnection conn = new OracleConnection(connString);
                string sql = "select name,  sum(case Course when '数学' then Score else null end) Math,         sum(case Course when '英语' then Score else null end) English   from test where name='victor' or name='lucy' or name='Jim'  group by name";
                OracleCommand cmd = new OracleCommand(sql, conn);
                OracleDataAdapter da1 = new OracleDataAdapter(cmd);
                DataSet ds1 = new DataSet();//定义数据集
                da1.Fill(ds1);
                DataTable dt = ds1.Tables[0];
                int rowcount = 0;
                if (dt.Rows.Count > 0)
                {
                    rowcount = dt.Rows.Count;
                }
                test = Dataset2Json(ds1, rowcount);

            }
            catch (Exception ex)
            {
                // Response.Write(ex.Message);
            }
            return test;
        }

        /// <summary>  
        /// DataSet转换成Json格式   
        /// </summary>   
        /// <paramname="ds">DataSet</param>  
        ///<returns></returns>   
        //public static string Dataset2Json(DataSet ds, int Fpage, int FpageSize, int total = -1)
        public static string Dataset2Json(DataSet ds, int total = -1)
        {
            System.Text.StringBuilder json = new System.Text.StringBuilder();

            foreach (DataTable dt in ds.Tables)
            {
                //设置表格属性
                json.Append("{\"chart\":{");
                //表格主题
                json.Append("\"caption\":");
                json.Append("\"成绩分析\",");
                //x轴
                json.Append("\"xAxisname\":");
                json.Append("\"姓名\",");
                //y轴
                json.Append("\"yAxisName\":");
                json.Append("\"成绩\"},");
                //加载具体内容
                json.Append(DataTable2Json(dt));
                json.Append("}");
            } return json.ToString();
        }

        /// <summary>   
        /// dataTable转换成Json格式   
        /// </summary>   
        /// <paramname="dt"></param>   
        ///<returns></returns>   
        //public static string DataTable2Json(DataTable dt, int Zpage, int ZpageSize)
        public static string DataTable2Json(DataTable dt)
        {
            System.Text.StringBuilder jsonBuilder = new System.Text.StringBuilder();
            //设置系列
            jsonBuilder.Append("\"categories\":[{");
            //设置每个系列
            jsonBuilder.Append("\"category\":[");
            for (int i = 0; i < dt.Rows.Count; i++)
            {

                jsonBuilder.Append("{\"label\":\"");
                jsonBuilder.Append(dt.Rows[i][0].ToString());

                jsonBuilder.Append("\"},");

            }
            if (dt.Rows.Count > 0)
            {
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
            }
            jsonBuilder.Append("]}],");
            //设置系列中的内容
            jsonBuilder.Append("\"dataset\": [");
            for (int i = 0; i < dt.Columns.Count - 1; i++)
            {
                //设置各系列值
                jsonBuilder.Append("{\"seriesname\":\"");
                jsonBuilder.Append(dt.Columns[i + 1].ColumnName);
                jsonBuilder.Append("\",\"data\": [");
                for (int j = 0; j < dt.Rows.Count; j++)
                {                    
                    jsonBuilder.Append("{\"value\": \"");
                    jsonBuilder.Append(dt.Rows[j][i + 1].ToString());

                    jsonBuilder.Append("\"},");
                }
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                jsonBuilder.Append("]},");
            }
            if (dt.Rows.Count > 0)
            {
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
            }
            jsonBuilder.Append("]");

            string jsonstr = jsonBuilder.ToString();
            return jsonstr;

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
   在这里,需要说明一下获取到的 table的数据,如下:

       

   页面设置如下:      

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="firstChart.aspx.cs" Inherits="FusionCharts.firstChart" %>

<!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></title>    
</head>
<body>
    <form id="form1" runat="server">
        <table>
            <tr>
                <td style="width: 50%; height: 50%">
                    <div id="Column2D"></div>
                </td> 
            </tr>         
        </table>

    </form>
</body>
</html>
<script src="FusionCharts/FusionCharts.js"></script>
<script src="jQuery/jquery-1.6.4.min.js"></script>
<script type="text/javascript">
    
    var chart1 =
   new FusionCharts('FusionCharts/MSColumn2D.swf', "ChartId", "400", "300");
   
    $.ajax( {
        type: "POST",       
        url: "getData.ashx",
        dataType: "json",
        success: function (data) {            
            chart1.setJSONData(data);
            
        },
        error: function (data) {
          
    }  
    })    
    chart1.render('Column2D');    
    
</script>
   其效果如下:(柱状图2D)

                                 

    同样,跟之前说的一样,替换核心SWF文件即可加载不同样式的 图表,如下效果:

    柱状图3D:

                            


    小结:

       使用json加载与XML加载的基本原理是一样的,我们也可以将table中的数据转换成XML格式来进行加载。需要注意的是在转换的过程中要注意FusionCharts所能识别的格式,它所加载的json格式与我们之前使用ajax+EasyUI加载后台的json串格式有点不同。

       介绍完基本的加载形式之后,下篇介绍一下FusionCharts中的向下钻取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
FusionCharts 是一个用于创建交互式和响应式数据可视化的 JavaScript 库。它支持多种图表类型,如线图、柱状图、饼图、仪表盘等,并提供了丰富的配置选项和 API。 使用 FusionCharts 可以轻松地将数据转换成可视化图表,并与用户进行交互。以下是 FusionCharts 的一些主要特点: 1. 支持多种图表类型:包括线图、柱状图、饼图、仪表盘等。 2. 丰富的配置选项:可以自定义图表的样式、颜色、字体等。 3. 响应式设计:可以根据不同设备的屏幕大小自适应调整图表的大小和布局。 4. 数据绑定:可以从多种数据源中获取数据,并将其直接绑定到图表上。 5. 交互性:支持多种交互方式,如鼠标悬停、点击等,可以让用户更加直观地理解数据。 6. 客户端/服务器端支持:可以在客户端和服务器端都使用 FusionCharts。 7. 多语言支持:支持多种语言,包括中文、英文等。 使用 FusionCharts 的基本步骤如下: 1. 引入 FusionCharts 库:在 HTML 中引入 FusionCharts 库的 JavaScript 文件。 2. 创建图表:使用 FusionCharts 提供的 API 创建图表对象。 3. 配置图表:使用 FusionCharts 提供的 API 配置图表样式、数据源等。 4. 渲染图表:将图表渲染到 HTML 页面上。 以下是一个简单的 FusionCharts 示例: ``` <html> <head> <title>FusionCharts Example</title> <script src="fusioncharts.js"></script> </head> <body> <div id="chart-container">图表将在此处显示</div> <script> // 创建图表对象 var chart = new FusionCharts({ type: 'column2d', renderAt: 'chart-container', width: '500', height: '300', dataFormat: 'json', dataSource: { "chart": { "caption": "销售额", "subCaption": "按月份", "xAxisName": "月份", "yAxisName": "销售额", "theme": "fusion" }, "data": [ {"label": "1月", "value": "10000"}, {"label": "2月", "value": "12000"}, {"label": "3月", "value": "8000"} ] } }); // 渲染图表 chart.render(); </script> </body> </html> ``` 在这个示例中,我们创建了一个柱状图,并将其渲染到了一个 id 为 chart-container 的 div 元素中。图表的数据使用 JSON 格式传递,并且包括了图表的样式和数据。最后,我们调用 chart.render() 方法将图表渲染到页面上。 FusionCharts 还提供了许多其他的 API 和配置选项,可以通过查看官方文档来学习更多。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值