网上的 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();
}
}
四.效果图