曾经在在PHP中使用FusionCharts一文中介绍如何在PHP中使用FusionCharts,并简要说明setDataURL(srcUrl)和setJSONData(jsonStr)这两种数据格式。本文主要介绍如何利于C#创建FusionCharts图表。
1、在项目引用中添加FusionCharts.dll
2、生成XML格式的字符串与选定图表对应的Flash文件,采用FusionCharts.RenderChartHTML生成HTML格式字符串。
public string CreateCharts()
{
string caption;
string graphicClass;
string decimalPrecision;
string formatNumberScale;
string commandQuery;
string strFlash = string.Empty;
SqlConnection oConnection = new SqlConnection(Globals.ConnectionString);
oConnection.Open();
SqlCommand oCommand = oConnection.CreateCommand();
oCommand.CommandText = "SELECT Caption, graphicClass, decimalPrecision, formatNumberScale, dataQuery FROM UT_CHARTS_GRAPH WHERE Id = " + ChartsSelect1.SelectedValue;
SqlDataReader oReader = oCommand.ExecuteReader();
if (!oReader.Read())
{
oReader.Close();
return "";
}
caption = oReader[0].ToString() + " - " + DateSelect1.SelectedDate.ToString("yyyy-MM-dd");
graphicClass = oReader[1].ToString();
decimalPrecision = oReader[2].ToString();
formatNumberScale = oReader[3].ToString();
commandQuery = oReader[4].ToString();
oReader.Close();
string strXML = "<chart baseFont='宋体' baseFontSize='12' outCnvBaseFontSize='12' outCnvBaseFont='宋体' outCnvBaseFontColor='000000' caption='" + caption + "' decimalPrecision='" + decimalPrecision + "' formatNumberScale='" + formatNumberScale + "' ";
if (graphicClass.ToLower() == "single")
{
strXML += " >";
oCommand.CommandText = commandQuery;
oCommand.Parameters.Add("@Date", SqlDbType.SmallDateTime).Value = DateSelect1.SelectedDate;
oReader = oCommand.ExecuteReader();
while (oReader.Read())
{
strXML += "<set name='" + oReader[0].ToString() + "' value='" + oReader[1].ToString() + "'/>";
}
oReader.Close();
strFlash = "FusionCharts/Line.swf";
switch (ChartsView1.ChartTypeIndex)
{
case 0:
strFlash = "FusionCharts/Line.swf";
break;
case 1:
strFlash = "FusionCharts/Spline.swf";
break;
case 2:
strFlash = "FusionCharts/Area2D.swf";
break;
case 3:
strFlash = "FusionCharts/SplineArea.swf";
break;
case 4:
strFlash = "FusionCharts/Column2D.swf";
break;
case 5:
strFlash = "FusionCharts/Column3D.swf";
break;
case 6:
strFlash = "FusionCharts/Doughnut2D.swf";
break;
case 7:
strFlash = "FusionCharts/Doughnut3D.swf";
break;
case 8:
strFlash = "FusionCharts/Pie2D.swf";
break;
case 9:
strFlash = "FusionCharts/Pie3D.swf";
break;
case 10:
strFlash = "FusionCharts/Bar2D.swf";
break;
default:
return "";
}
}
else if (graphicClass.ToLower() == "multi")
{
strXML += " showValues='0'>";
oCommand.CommandText = commandQuery;
oCommand.Parameters.Add("@Date", SqlDbType.SmallDateTime).Value = DateSelect1.SelectedDate;
oReader = oCommand.ExecuteReader();
string categories = "";
int datasetCount = oReader.FieldCount - 1;
string[] datasets = new string[datasetCount];
categories += "<categories>";
for (int fieldNumber = 1; fieldNumber <= datasetCount; fieldNumber++)
{
string name = oReader.GetName(fieldNumber);
datasets[fieldNumber-1] += "<dataset seriesName='" + name + "'>";
}
while (oReader.Read())
{
categories += "<category label='" + oReader[0].ToString() + "' />";
for (int fieldNumber = 1; fieldNumber <= datasetCount; fieldNumber++)
{
datasets[fieldNumber-1] += "<set value='" + oReader[fieldNumber].ToString() + "' />";
}
}
oReader.Close();
categories += "</categories>";
strXML += categories;
for (int fieldNumber = 1; fieldNumber <= datasetCount; fieldNumber++)
{
datasets[fieldNumber-1] += "</dataset>";
strXML += datasets[fieldNumber-1];
}
strFlash = "FusionCharts/MSLine.swf";
switch (ChartsView1.ChartTypeIndex)
{
case 0:
strFlash = "FusionCharts/MSLine.swf";
break;
case 1:
strFlash = "FusionCharts/MSSpline.swf";
break;
case 2:
strFlash = "FusionCharts/MSArea.swf";
break;
case 3:
strFlash = "FusionCharts/MSSplineArea.swf";
break;
case 4:
strFlash = "FusionCharts/MSColumn2D.swf";
break;
case 5:
strFlash = "FusionCharts/MSColumn3D.swf";
break;
case 10:
strFlash = "FusionCharts/MSBar3D.swf";
break;
default:
return "";
}
}
strXML += "<styles>";
strXML += "<definition>";
strXML += "<style name='FontStyle1' type='font' face='宋体' size='12' color='000000' bold='0' />";
strXML += "<style name='AnimationStyle1' type='animation' param='_xScale' start='0' duration='0.5' />";
strXML += "<style name='Shadow1' type='Shadow' color='CCCCCC' />";
strXML += "</definition>";
strXML += "<application>";
strXML += "<apply toObject='Caption' styles='FontStyle1,Shadow1' />";
strXML += "<apply toObject='Canvas' styles='AnimationStyle1' />";
strXML += "<apply toObject='DataPlot' styles='Shadow1' />";
strXML += "</application> ";
strXML += "</styles>";
strXML += "</chart>";
return FusionCharts.RenderChartHTML(strFlash, "", strXML, "myNext", "720", "440", false);
}
3、在WEB应用中直接嵌入HTML,在Windows中采用WebBrowser类中DocumentText属性设置显示Flash图