logo Flash图表控件 FusionCharts 使用教程 我也要发布文档

利用C#创建各类动态图表


曾经在在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图