通过xml配置操作FusionChartFree

   这几天一直接触FusionChartFree做报表.一开始使用继承和多态.但是因为属性过多,最终选择放弃.最后选择使用xml 进行配置.因水平有限,难免出现错误,降低性能.

  FusionChart 中我分为2个系列,一个是简单图表,另一个为复杂图表.直接上代码:

  简单图表

ContractedBlock.gif ExpandedBlockStart.gif View Code
 public class SingleChart : BaseChart
{
bool _istrendlines;
/// <summary>
/// 是否添加 标准线 对于 Column2D Column3D 有效
/// </summary>
public bool Istrendlines
{
get { return _istrendlines; }
set { _istrendlines = value; }
}

Hashtable hstable = new Hashtable(); Hashtable hstable2 = new Hashtable();
public SingleChart()
{
}
/// <summary>
/// 加载指定的xml源
/// </summary>
/// <param name="Xmlpath">虚拟路径 string Xmlpath = @"xmlData/data1.xml";</param>
public SingleChart(string Xmlpath)
{
this.Xmlpath = Xmlpath;
}
/// <summary>
/// 加载指定的xml源
/// </summary>
/// <returns></returns>
public string GetChartxml()
{
StringBuilder xmlbind = new StringBuilder();

Guid guid = Guid.NewGuid();
string divid = guid.ToString() + "div";
string swfPath = "";
if (Xmlpath.Contains(".."))
{
swfPath = "../Charts/FCF_" + Fusiontype + ".swf";
}
else
{
swfPath = "Charts/FCF_" + Fusiontype + ".swf";
}
xmlbind.AppendFormat("<div id = '{0}'>如果你看到这,说明文件没有被加载....</div>", divid);
xmlbind.Append(" <script type = 'text/javascript' >");
xmlbind.AppendFormat(" var myChart = new FusionCharts('{0}', '{1}', '{2}', '{3}'); ", swfPath,divid , Width, Height);
xmlbind.AppendFormat(" myChart.setDataURL(\"{0}\") ;", this.Xmlpath);
xmlbind.AppendFormat(" myChart.render('{0}') ", divid);
xmlbind.Append(" </script> ");


return xmlbind.ToString();
}

/// <summary>
/// 显示数据
/// </summary>
/// <param name="obj">图表类</param>
/// <param name="dataset">数据源</param>
/// <param name="Xmlpath">外置配置文件 绝对路径</param>
/// <returns></returns>
///
public override string GetChartxml(DataSet dataset)
{
string xml = "";
string mark = Xmlpath;
if (Fusiontype == FusionChartType.Pie2D || Fusiontype == FusionChartType.Pie3D || Fusiontype == FusionChartType.Doughnut2D || Fusiontype == FusionChartType.Area2D || Fusiontype == FusionChartType.Line || Fusiontype == FusionChartType.Column2D || Fusiontype == FusionChartType.Column3D)
{
//加载 配置文件

Xmlpath = System.Web.HttpContext.Current.Server.MapPath(Xmlpath);

if (!string.IsNullOrEmpty(Xmlpath))
{
xml = GetHead() + GetBody(dataset) + GetFoot();
}
}

string swfPath = "";
if (mark.Contains(".."))
{
swfPath = "../Charts/FCF_" + Fusiontype + ".swf";
}
else
{
swfPath = "Charts/FCF_" + Fusiontype + ".swf";
}
StringBuilder xmlbind = new StringBuilder();
Guid guid = Guid.NewGuid();
string divid = guid.ToString() + "div";
xmlbind.AppendFormat("<div id = '{0}'>如果你看到这,说明文件没有被加载....</div>", divid);
xmlbind.Append(" <script type = 'text/javascript' >");
xmlbind.AppendFormat(" var myChart = new FusionCharts('{0}', '{1}', '{2}', '{3}'); ", swfPath, divid, Width, Height);
xmlbind.AppendFormat(" myChart.setDataXML(\"{0}\") ;", xml);
xmlbind.AppendFormat(" myChart.render('{0}') ", divid);
xmlbind.Append(" </script> ");
return xmlbind.ToString();

}
/// <summary>
/// 使用配置文件 获取xml头
/// </summary>
/// <param name="Xmlpath"></param>
/// <returns></returns>
private string GetHead()
{
hstable.Clear();
hstable2.Clear();
StringBuilder sb = new StringBuilder();

sb.Append("<?xml version='1.0' encoding='utf-8' ?>");
sb.Append("<graph ");

if (File.Exists(Xmlpath))
{
XmlDocument doc = new XmlDocument();//实例化一个XML文档
doc.Load(Xmlpath);
XmlNode xmlnode = doc.SelectSingleNode("config");
XmlNodeList list = xmlnode.ChildNodes;
Dictionary<object, object> dic = new Dictionary<object, object>();
foreach (XmlNode node in list)
{
foreach (XmlNode xmlnode2 in node)
{
string name = xmlnode2.Name;
string values = xmlnode2.InnerXml;
if (values != "" && !name.Contains("My"))
{
sb.AppendFormat(" {0}='{1}'", name, values);
}
if (values != "" && name.Contains("My"))
{

hstable.Add(name, values);
}
if (values != "" && name.Contains("Li"))
{
hstable2.Add(name, values);
}
}
}
}
sb.Append(">");
return sb.ToString();
}
/// <summary>
/// 使用配置文件加载数据
/// </summary>
/// <param name="dataset"></param>
/// <param name="flag"></param>
/// <returns></returns>
private string GetBody(DataSet dataset)
{
StringBuilder sb1 = new StringBuilder();

string values = "";
string name = "";
string link = "";
string str = "";
if (hstable.ContainsKey("Myvalue"))
{
values = hstable["Myvalue"].ToString();
}
if (hstable.ContainsKey("Myname"))
{
name = hstable["Myname"].ToString();
}
if (hstable.ContainsKey("Mylink"))
{
str = hstable["Mylink"].ToString();
if (str.Contains("|"))
{
str = str.Replace('|', '&');
}
link = str;
}
if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(values)) //为空直接 跳出
{
if (dataset.Tables.Count > 0 && dataset.Tables[0].Rows.Count > 0)
{

foreach (DataRow row in dataset.Tables[0].Rows)
{
if (str != "")
{
Regex reg = new Regex(@"(?<=\?)(?:[^=]+=([^&]+)(?:&&)?)*");
List<string> list = new List<string>();
foreach (Capture c in reg.Match(str).Groups[1].Captures)
{
str = str.Replace(c.Value, row["" + c.Value + ""].ToString());
}
if (Fusiontype == FusionChartType.Area2D || Fusiontype == FusionChartType.Column2D)
{
sb1.AppendFormat(" <set name='{0}' value='{1}' Link='{2}' color='{3}'/> ", row[name], row[values].ToString(), str, GetColor());

}
else
{
sb1.AppendFormat(" <set name='{0}' value='{1}' Link='{2}'/> ", row[name], row[values].ToString(), str);
}

str = link;
}
else
{
if (Fusiontype == FusionChartType.Area2D || Fusiontype == FusionChartType.Column2D || Fusiontype == FusionChartType.Column3D)
{
sb1.AppendFormat(" <set name='{0}' value='{1}' color='{2}' /> ", row[name], row[values].ToString(), GetColor());
}
else
{
sb1.AppendFormat(" <set name='{0}' value='{1}' /> ", row[name], row[values].ToString());
}
}

}
}
}

if (Fusiontype == FusionChartType.Column2D || Fusiontype == FusionChartType.Column3D)
{
if (Istrendlines)
{
sb1.Append(Trwndlines());
}
}
return sb1.ToString();
}
/// <summary>
/// 为图表画 数据 标准线
/// </summary>
/// <returns></returns>
private string Trwndlines()
{
string Ligoodstartvalue = "";
string LigooddisplayValue = "";
string Libadstartvalue = "";
string LibaddisplayValue = "";
string Ligoodcolor = "";
string Libadcolor = "";
string Lithickness = "";
string LiisTrendZone = "";
if (hstable2.ContainsKey("Ligoodstartvalue"))
{
Ligoodstartvalue = hstable2["Ligoodstartvalue"].ToString();
}
if (hstable2.ContainsKey("LigooddisplayValue"))
{
LigooddisplayValue = hstable2["LigooddisplayValue"].ToString();
}
if (hstable2.ContainsKey("Libadstartvalue"))
{
Libadstartvalue = hstable2["Libadstartvalue"].ToString();
}
if (hstable2.ContainsKey("LibaddisplayValue"))
{
LibaddisplayValue = hstable2["LibaddisplayValue"].ToString();
}
if (hstable2.ContainsKey("Ligoodcolor"))
{
Ligoodcolor = hstable2["Ligoodcolor"].ToString();
}
if (hstable2.ContainsKey("Libadcolor"))
{
Libadcolor = hstable2["Libadcolor"].ToString();
}
if (hstable2.ContainsKey("Lithickness"))
{
Lithickness = hstable2["Lithickness"].ToString();
}
if (hstable2.ContainsKey("LiisTrendZone"))
{
LiisTrendZone = hstable2["LiisTrendZone"].ToString();
}

StringBuilder sb = new StringBuilder();
sb.Append(" <trendlines> ");
sb.Append(" <line ");
sb.AppendFormat(" startvalue='{0}' displayValue='{1}' color='{2}' thickness='{3}' isTrendZone='{4}' ", Ligoodstartvalue, LigooddisplayValue, Ligoodcolor, Lithickness, LiisTrendZone);
sb.Append(" /> ");

sb.Append(" <line ");
sb.AppendFormat(" startvalue='{0}' displayValue='{1}' color='{2}' thickness='{3}' isTrendZone='{4}' ", Libadstartvalue, LibaddisplayValue, Libadcolor, Lithickness, LiisTrendZone);
sb.Append(" /> ");
sb.Append(" </trendlines> ");

return sb.ToString();


}
/// <summary>
/// 图标结尾
/// </summary>
/// <returns></returns>
private string GetFoot()
{
return " </graph> ";
}

/// <summary>
/// 获取随机颜色
/// </summary>
/// <returns></returns>
private string GetColor()
{
Thread.Sleep(50);
string strcolor = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F";
string[] scolor = strcolor.Split(',');
string mycolor = "";
Random r = new Random();
for (int i = 0; i <= 5; i++)
{

mycolor += scolor[r.Next(0, scolor.Length)];
}
return mycolor;
}
}


xml配置文件

ContractedBlock.gif ExpandedBlockStart.gif View Code
<?xml version="1.0" encoding="utf-8" ?>
<config>
<head>
<caption>Column2D指定标题</caption>
<subCaption>副标题</subCaption>
<bgcolor>e1f5ff</bgcolor>
<yaxismaxvalue>20</yaxismaxvalue>
<yaxisminvalue>-20.5</yaxisminvalue>
<xaxisname>Country</xaxisname>
<hovercapbg>ffffdd</hovercapbg>
<hovercapborder>000000</hovercapborder>
<numdivlines>4</numdivlines>
<numberSuffix>$</numberSuffix>
</head>
<body>
<Myvalue>points</Myvalue>
<Myname>names</Myname>
<Mylink>Line2D.aspx?first=id||two=names</Mylink>
</body>
<trendlines>
<Ligoodstartvalue>5</Ligoodstartvalue>
<LigooddisplayValue>good</LigooddisplayValue>
<Libadstartvalue>-6</Libadstartvalue>
<LibaddisplayValue>bad</LibaddisplayValue>
<Ligoodcolor>FF0000</Ligoodcolor>
<Libadcolor>FF0000</Libadcolor>
<Lithickness>1</Lithickness>
<LiisTrendZone>0</LiisTrendZone>
</trendlines>

</config>

代码过多,不贴了.

问题:1.Y轴不支持中文.找了较多资料也没有解决.如果哪位解决了,不妨告诉我.

       2.如果跳转链接中含有中文,在url上面显示是乱码.但是request[""]显示正确.

       3.代码比较臃肿,正在简化

       4.............

整体代码:http://files.cnblogs.com/xyong/FusionChart.zip

转载于:https://www.cnblogs.com/xyong/articles/2226752.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值