zoukankan      html  css  js  c++  java
  • FusionCharts--加载json文件

       上篇介绍了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=" 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中的向下钻取。

  • 相关阅读:
    sql 2012中获取表的信息,包含字段的描述
    C#如何创建泛型类T的实例
    C# 之 DataReader 和 DataSet 的区别
    C#进阶系列——WebApi 接口参数不再困惑:传参详解
    IIS事件查看器_WebServer事件查看器_帮助查看IIS-Web服务器事件执行日志
    SQL分页查询的几种方式
    freeRTOS中文实用教程3--中断管理之延迟中断处理
    freeRTOS中文实用教程2--队列
    freeRTOS中文实用教程1--任务
    UML和模式应用5:细化阶段(5)---系统顺序图
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253739.html
Copyright © 2011-2022 走看看