FusionCharts (C/S)小案例

网上的 FusionCharts 都是 基于(B/S)的案例 ,自己写了 一个C/S  ,有什么好的建议 请留言.

一 .简介

FusionCharts是一个Flash的图表组件,它可以用来制作数据动画图表,其中动画效果用的是Adob

e Flash 8 (原Macromedia Flash的)制作的flash , FusionCharts可用于任何网页的 脚本语言 类似于HTML , .NET,ASP , JSP技术的, PHP , ColdFusion等,提供互动性和强大的图表。使用XML作为其数据接口, FusionCharts充分利用流体美丽的Flash创建紧凑,互动性和视觉逮捕图表。


二.分析

 1. 各种Flash文件 ,js文件,FusionCharts 的 一个dll.

  2.需要的 是 html  文件 和xml文件。

 3. 要实现才C/S  flash报表效果。最简单的 方式 是 生产对应的html  文件 和xml文件 然后 展示时读取 html 文件,

C/S 可以使用浏览器控件webBrowser 加以实现。

注意:xml 的文件格式 是根据 你所选择使用的Flash 文件决定的,可能 有的xml标签格式差不多。

三.案例 源代码

注意:flsh ,js 文件 调试时 放debug 目录下, 别忘了 dll 引用。

  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        ///  报表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string htmfileName = "MSArea";//html 文件名
            string xmlfileName = "MSArea1";//xml  文件名
            #region html文件内容
            StringBuilder bui = new StringBuilder();
            bui.Append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"); bui.Append("\r\n");
            bui.Append("<html>"); bui.Append("\r\n");
            bui.Append("<head>"); bui.Append("\r\n");
            bui.Append("<title>");
            bui.Append("标题名");
            bui.Append("</title>"); bui.Append("\r\n");
            bui.Append("<script language=\"JavaScript\" src=\"../js/FusionCharts.js\"></script>"); bui.Append("\r\n");
            bui.Append("</head>"); bui.Append("\r\n");

            bui.Append("<body>"); bui.Append("\r\n");
            #region 主体(js内容) dll中封装的方法
            string st = FusionCharts.RenderChart("../FusionCharts/MSArea.swf", xmlfileName + ".xml", "", "Line", "800", "300", false, false);   //文件中使用的 是相对路径
            bui.Append(st); bui.Append("\r\n");
            #endregion
            bui.Append("</body>"); bui.Append("\r\n");
            bui.Append("</html>");

            string str = bui.ToString();
            #endregion

            #region 创建html 文件
            string urldir = Application.StartupPath + @"\MSArea";
            string url = Application.StartupPath + @"\MSArea\" + htmfileName + ".html";
            if (!Directory.Exists(urldir))//不存在文件夹 就创建
            {
                Directory.CreateDirectory(urldir);
            }
            //html 文件内容 基本已经固定
            if (!File.Exists(url))//不存在文件 就创建
            {
                System.IO.FileStream stre0 = File.Create(url);
                stre0.Close();

                using (StreamWriter w = new StreamWriter(url, false, Encoding.Default))
                {
                    w.Write(str);
                }
            }
            #endregion
            //方案:读取数据库数据 拼接xml 格式数据 转化成文件流,最后文件流保存到固定文件中,浏览控件读取文件显示动态报表
            #region 读数据库 数据 创建xml 文件,若xml文件存在 则覆盖
            ConnDb nn=new ConnDb();
            DataSet Sys_ds = nn.query("select a.creationdate,to_char(a.creationdate,'yyyy') YY,to_char(a.creationdate,'MM') MM,sum(a.qty) qty from tb_taccstock a group by a.creationdate");//new DataSet();//数据库数据集合

            StringBuilder xmlSBder = new StringBuilder();
            xmlSBder.Append("<chart bgColor=\"E9E9E9\" outCnvBaseFontColor=\"666666\" ");
            xmlSBder.Append(string.Format("caption=\"{0}\" xAxisName=\"{1}\" yAxisName=\"{2}\" numberPrefix=\"{3}\" ", "某某统计", "月份", "销售额", "¥"));
            xmlSBder.Append("showNames=\"1\" showValues=\"0\" plotFillAlpha=\"50\" numVDivLines=\"10\" showAlternateVGridColor=\"1\" AlternateVGridColor=\"e1f5ff\" divLineColor=\"e1f5ff\" vdivLineColor=\"e1f5ff\" baseFontColor=\"666666\" canvasBorderThickness=\"1\" showPlotBorder=\"1\" plotBorderThickness=\"0\" baseFont=\"Arial\" baseFontSize=\"12\" rotateYAxisName='0' chartRightMargin=\"40\">");
            xmlSBder.Append("\r\n");
            xmlSBder.Append("<categories>"); xmlSBder.Append("\r\n");
            xmlSBder.Append("<category label=\"一月\" />"); xmlSBder.Append("\r\n");
            xmlSBder.Append("<category label=\"二月\" />"); xmlSBder.Append("\r\n");
            xmlSBder.Append("<category label=\"三月\" />"); xmlSBder.Append("\r\n");
            xmlSBder.Append("<category label=\"四月\" />"); xmlSBder.Append("\r\n");
            xmlSBder.Append("<category label=\"五月\" />"); xmlSBder.Append("\r\n");
            xmlSBder.Append("</categories>"); xmlSBder.Append("\r\n");

            if (Sys_ds != null && Sys_ds.Tables.Count > 0)
            {
                //Sys_ds.WriteXml(xmlUrl); //数据写入到制定文件中
                DataTable dt = Sys_ds.Tables[0];
                var listgroupby=dt.Select().GroupBy(i => i["YY"]);
                var nnn= listgroupby.ToList();
                int count = nnn.Count;
                for (int i = 0; i < nnn.Count; i++)
                {
                    var nddd = nnn[i];
                    string key = nddd.Key.ToString();
                    string color = i % 2 == 0 ? "B1D1DC" : "C8A1D1";
                    xmlSBder.Append(string.Format("<dataset seriesName=\"{0}\" color=\"{1}\" plotBorderColor=\"{2}\">", key, color, color));
                    xmlSBder.Append("\r\n");
                    string key1 ="0", key2 ="0", key3 ="0", key4 ="0",  key5 = "0";
                    foreach (var dr in nddd)
                    {
                        string yy = dr["YY"].ToString();
                        string mm = dr["MM"].ToString();
                        int qty =int.Parse(dr["qty"].ToString())+100;
                        switch (mm)
                        {
                            case "01": key1 = qty.ToString(); break;
                            case "02": key2 = qty.ToString(); break;
                            case "03": key3 = qty.ToString(); break;
                            case "04": key4 = qty.ToString(); break;
                            case "05": key5 = qty.ToString(); break;
                        }
                    }
                    xmlSBder.Append( Getstr(key1, key2, key3, key4, key5));
                    xmlSBder.Append("</dataset>"); xmlSBder.Append("\r\n");
                }
            }
            
            xmlSBder.Append("</chart>");
            string xmlUrl = Application.StartupPath + @"\MSArea\" + xmlfileName + ".xml";
            if (!File.Exists(xmlUrl)) //不存在xml 文件 则 创建
            {
                System.IO.FileStream stre0 = File.Create(xmlUrl);
                stre0.Close();
            }

            using (StreamWriter w1 = new StreamWriter(xmlUrl, false, Encoding.Default)) //注意写入文件时 指定格式 Default 或 UTF8  ,
            {
                w1.Write(xmlSBder.ToString());
            }
            #endregion
            #region
            
            #endregion

            //绑定数据源
            //webBrowser1.Navigate(Application.StartupPath + "\\" + "MSArea\\" + htmfileName + ".html");
            webBrowser1.Navigate(Application.StartupPath + "\\" + "MSArea\\" + htmfileName + ".html?url=" + xmlfileName + ".xml");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            webBrowser1.Navigate(Application.StartupPath + "\\" + "Pie2D\\Pie2D.html?url=char.xml");
        }

        private string Getstr(string key1, string key2, string key3, string key4, string key5)
        {
            StringBuilder xmlSBder = new StringBuilder();
            string value = "<set value=\"{0}\" />";
            xmlSBder.Append( string.Format(value, key1)); xmlSBder.Append("\r\n");
            xmlSBder.Append( string.Format(value, key2)); xmlSBder.Append("\r\n");
            xmlSBder.Append( string.Format(value, key3)); xmlSBder.Append("\r\n");
            xmlSBder.Append( string.Format(value, key4)); xmlSBder.Append("\r\n");
            xmlSBder.Append( string.Format(value, key5)); xmlSBder.Append("\r\n");
            return xmlSBder.ToString();
        }

    }
四.效果图


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值