zoukankan      html  css  js  c++  java
  • 通用类 FusionCharts 图表控件

    public class FusionCharts
        {
            /// <summary>
            /// encodes the dataURL before it's served to FusionCharts
            /// If you have parameters in your dataURL, you'll necessarily need to encode it
            /// </summary>
            /// <param name="dataURL">dataURL to be fed to chart</param>
            /// <param name="noCacheStr">Whether to add aditional string to URL to disable caching of data</param>
            /// <returns>Encoded dataURL, ready to be consumed by FusionCharts</returns>
            public static string EncodeDataURL(string dataURL, bool noCacheStr)
            {
                string result = dataURL;
                if (noCacheStr)
                {
                    result += (dataURL.IndexOf("?") != -1) ? "&" : "?";
                    //Replace : in time with _, as FusionCharts cannot handle : in URLs
                    result += "FCCurrTime=" + DateTime.Now.ToString().Replace(":", "_");
                }
    
                return System.Web.HttpUtility.UrlEncode(result);
            }
    
            /// <summary>
            /// Generate html code for rendering chart
            /// This function assumes that you've already included the FusionCharts JavaScript class in your page
            /// </summary>
            /// <param name="chartSWF">SWF File Name (and Path) of the chart which you intend to plot</param>
            /// <param name="strURL">If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)</param>
            /// <param name="strXML">If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)</param>
            /// <param name="chartId">Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.</param>
            /// <param name="chartWidth">Intended width for the chart (in pixels)</param>
            /// <param name="chartHeight">Intended height for the chart (in pixels)</param>
            /// <param name="debugMode">Whether to start the chart in debug mode</param>
            /// <param name="registerWithJS">Whether to ask chart to register itself with JavaScript</param>
            /// <param name="transparent">Whether transparent chart (true / false)</param>
            /// <param name="bgColor">Back Ground Color</param>
            /// <param name="scaleMode">Set Scale Mode</param>
            /// <param name="language">Set SWF file Language</param>
            /// <returns>JavaScript + HTML code required to embed a chart</returns>
            private static string RenderChartALL(string chartSWF, string strURL, string strXML, string chartId, string chartWidth, string chartHeight, bool debugMode, bool registerWithJS, bool transparent, string bgColor, string scaleMode, string language)
            {
    
                StringBuilder builder = new StringBuilder();
    
                builder.AppendFormat("<!-- START Script Block for Chart {0} -->" + Environment.NewLine, chartId);
    
                builder.AppendFormat("<div id='{0}Div' >" + Environment.NewLine, chartId);
                builder.Append("Chart." + Environment.NewLine);
                builder.Append("</div>" + Environment.NewLine);
                builder.Append("<script type=\"text/javascript\">" + Environment.NewLine);
                builder.AppendFormat("var chart_{0} = new FusionCharts(\"{1}\", \"{0}\", \"{2}\", \"{3}\", \"{4}\", \"{5}\", \"{6}\", \"{7}\", \"{8}\" );" + Environment.NewLine, chartId, chartSWF, chartWidth, chartHeight, boolToNum(debugMode), boolToNum(registerWithJS), bgColor, scaleMode, language);
                if (strXML.Length == 0)
                {
                    builder.AppendFormat("chart_{0}.setDataURL(\"{1}\");" + Environment.NewLine, chartId, strURL);
                }
                else
                {
                    builder.AppendFormat("chart_{0}.setDataXML(\"{1}\");" + Environment.NewLine, chartId, strXML);
                }
    
                if (transparent == true)
                {
                    builder.AppendFormat("chart_{0}.setTransparent({1});" + Environment.NewLine, chartId, "true");
                }
    
                builder.AppendFormat("chart_{0}.render(\"{1}Div\");" + Environment.NewLine, chartId, chartId);
                builder.Append("</script>" + Environment.NewLine);
                builder.AppendFormat("<!-- END Script Block for Chart {0} -->" + Environment.NewLine, chartId);
                return builder.ToString();
            }
    
            /// <summary>
            /// Generate html code for rendering chart
            /// This function assumes that you've already included the FusionCharts JavaScript class in your page
            /// </summary>
            /// <param name="chartSWF">SWF File Name (and Path) of the chart which you intend to plot</param>
            /// <param name="strURL">If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)</param>
            /// <param name="strXML">If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)</param>
            /// <param name="chartId">Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.</param>
            /// <param name="chartWidth">Intended width for the chart (in pixels)</param>
            /// <param name="chartHeight">Intended height for the chart (in pixels)</param>
            /// <param name="debugMode">Whether to start the chart in debug mode</param>
            /// <param name="registerWithJS">Whether to ask chart to register itself with JavaScript</param>
            /// <param name="transparent">Whether transparent chart (true / false)</param>
            /// <returns>JavaScript + HTML code required to embed a chart</returns>
            public static string RenderChart(string chartSWF, string strURL, string strXML, string chartId, string chartWidth, string chartHeight, bool debugMode, bool registerWithJS, bool transparent)
            {
                return RenderChartALL(chartSWF, strURL, strXML, chartId, chartWidth, chartHeight, debugMode, registerWithJS, transparent, "", "noScale", "EN");
            }
    
            /// <summary>
            /// Generate html code for rendering chart
            /// This function assumes that you've already included the FusionCharts JavaScript class in your page
            /// </summary>
            /// <param name="chartSWF">SWF File Name (and Path) of the chart which you intend to plot</param>
            /// <param name="strURL">If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)</param>
            /// <param name="strXML">If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)</param>
            /// <param name="chartId">Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.</param>
            /// <param name="chartWidth">Intended width for the chart (in pixels)</param>
            /// <param name="chartHeight">Intended height for the chart (in pixels)</param>
            /// <param name="debugMode">Whether to start the chart in debug mode</param>
            /// <param name="registerWithJS">Whether to ask chart to register itself with JavaScript</param>
            /// <param name="transparent">Whether transparent chart (true / false)</param>
            /// <param name="bgColor">Back Ground Color</param>
            /// <param name="scaleMode">Set Scale Mode</param>
            /// <param name="language">Set SWF file Language</param>
            /// <returns>JavaScript + HTML code required to embed a chart</returns>
            public static string RenderChart(string chartSWF, string strURL, string strXML, string chartId, string chartWidth, string chartHeight, bool debugMode, bool registerWithJS, bool transparent, string bgColor, string scaleMode, string language)
            {
                return RenderChartALL(chartSWF, strURL, strXML, chartId, chartWidth, chartHeight, debugMode, registerWithJS, transparent, bgColor, scaleMode, language);
            }
    
            /// <summary>
            /// Generate html code for rendering chart
            /// This function assumes that you've already included the FusionCharts JavaScript class in your page
            /// </summary>
            /// <param name="chartSWF">SWF File Name (and Path) of the chart which you intend to plot</param>
            /// <param name="strURL">If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)</param>
            /// <param name="strXML">If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)</param>
            /// <param name="chartId">Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.</param>
            /// <param name="chartWidth">Intended width for the chart (in pixels)</param>
            /// <param name="chartHeight">Intended height for the chart (in pixels)</param>
            /// <param name="debugMode">Whether to start the chart in debug mode</param>
            /// <param name="registerWithJS">Whether to ask chart to register itself with JavaScript</param>
            /// <returns>JavaScript + HTML code required to embed a chart</returns>
            public static string RenderChart(string chartSWF, string strURL, string strXML, string chartId, string chartWidth, string chartHeight, bool debugMode, bool registerWithJS)
            {
                return RenderChart(chartSWF, strURL, strXML, chartId, chartWidth, chartHeight, debugMode, registerWithJS, false, "", "noScale", "EN");
            }
    
            /// <summary>
            /// Renders the HTML code for the chart. This
            /// method does NOT embed the chart using JavaScript class. Instead, it uses
            /// direct HTML embedding. So, if you see the charts on IE 6 (or above), you'll
            /// see the "Click to activate..." message on the chart.
            /// </summary>
            /// <param name="chartSWF">SWF File Name (and Path) of the chart which you intend to plot</param>
            /// <param name="strURL">If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)</param>
            /// <param name="strXML">If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)</param>
            /// <param name="chartId">Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.</param>
            /// <param name="chartWidth">Intended width for the chart (in pixels)</param>
            /// <param name="chartHeight">Intended height for the chart (in pixels)</param>
            /// <param name="debugMode">Whether to start the chart in debug mode</param>
            /// <returns></returns>
    
            public static string RenderChartHTML(string chartSWF, string strURL, string strXML, string chartId, string chartWidth, string chartHeight, bool debugMode)
            {
                return RenderChartHTMLALL(chartSWF, strURL, strXML, chartId, chartWidth, chartHeight, debugMode, false, false, "", "noScale", "EN");
    
            }
    
            /// <summary>
            /// Renders the HTML code for the chart. This
            /// method does NOT embed the chart using JavaScript class. Instead, it uses
            /// direct HTML embedding. So, if you see the charts on IE 6 (or above), you'll
            /// see the "Click to activate..." message on the chart.
            /// </summary>
            /// <param name="chartSWF">SWF File Name (and Path) of the chart which you intend to plot</param>
            /// <param name="strURL">If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)</param>
            /// <param name="strXML">If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)</param>
            /// <param name="chartId">Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.</param>
            /// <param name="chartWidth">Intended width for the chart (in pixels)</param>
            /// <param name="chartHeight">Intended height for the chart (in pixels)</param>
            /// <param name="debugMode">Whether to start the chart in debug mode</param>
            /// <param name="registerWithJS">Whether to ask chart to register itself with JavaScript</param>
            /// <returns></returns>
    
            public static string RenderChartHTML(string chartSWF, string strURL, string strXML, string chartId, string chartWidth, string chartHeight, bool debugMode, bool registerWithJS)
            {
                return RenderChartHTMLALL(chartSWF, strURL, strXML, chartId, chartWidth, chartHeight, debugMode, registerWithJS, false, "", "noScale", "EN");
            }
    
            /// <summary>
            /// Renders the HTML code for the chart. This
            /// method does NOT embed the chart using JavaScript class. Instead, it uses
            /// direct HTML embedding. So, if you see the charts on IE 6 (or above), you'll
            /// see the "Click to activate..." message on the chart.
            /// </summary>
            /// <param name="chartSWF">SWF File Name (and Path) of the chart which you intend to plot</param>
            /// <param name="strURL">If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)</param>
            /// <param name="strXML">If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)</param>
            /// <param name="chartId">Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.</param>
            /// <param name="chartWidth">Intended width for the chart (in pixels)</param>
            /// <param name="chartHeight">Intended height for the chart (in pixels)</param>
            /// <param name="debugMode">Whether to start the chart in debug mode</param>
            /// <param name="registerWithJS">Whether to ask chart to register itself with JavaScript</param>
            /// <param name="transparent">Whether transparent chart (true / false)</param>
            /// <returns></returns>
            public static string RenderChartHTML(string chartSWF, string strURL, string strXML, string chartId, string chartWidth, string chartHeight, bool debugMode, bool registerWithJS, bool transparent)
            {
                return RenderChartHTMLALL(chartSWF, strURL, strXML, chartId, chartWidth, chartHeight, debugMode, registerWithJS, transparent, "", "noScale", "EN");
            }
    
            /// <summary>
            /// Renders the HTML code for the chart. This
            /// method does NOT embed the chart using JavaScript class. Instead, it uses
            /// direct HTML embedding. So, if you see the charts on IE 6 (or above), you'll
            /// see the "Click to activate..." message on the chart.
            /// </summary>
            /// <param name="chartSWF">SWF File Name (and Path) of the chart which you intend to plot</param>
            /// <param name="strURL">If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)</param>
            /// <param name="strXML">If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)</param>
            /// <param name="chartId">Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.</param>
            /// <param name="chartWidth">Intended width for the chart (in pixels)</param>
            /// <param name="chartHeight">Intended height for the chart (in pixels)</param>
            /// <param name="debugMode">Whether to start the chart in debug mode</param>
            /// <param name="registerWithJS">Whether to ask chart to register itself with JavaScript</param>
            /// <param name="transparent">Whether transparent chart (true / false)</param>
            /// <param name="bgColor">Back Ground Color</param>
            /// <param name="scaleMode">Set Scale Mode</param>
            /// <param name="language">Set SWF file Language</param>
            /// <returns></returns>
            public static string RenderChartHTML(string chartSWF, string strURL, string strXML, string chartId, string chartWidth, string chartHeight, bool debugMode, bool registerWithJS, bool transparent, string bgColor, string scaleMode, string language)
            {
                return RenderChartHTMLALL(chartSWF, strURL, strXML, chartId, chartWidth, chartHeight, debugMode, registerWithJS, transparent, bgColor, scaleMode, language);
            }
    
            /// <summary>
            /// Renders the HTML code for the chart. This
            /// method does NOT embed the chart using JavaScript class. Instead, it uses
            /// direct HTML embedding. So, if you see the charts on IE 6 (or above), you'll
            /// see the "Click to activate..." message on the chart.
            /// </summary>
            /// <param name="chartSWF">SWF File Name (and Path) of the chart which you intend to plot</param>
            /// <param name="strURL">If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method)</param>
            /// <param name="strXML">If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method)</param>
            /// <param name="chartId">Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id.</param>
            /// <param name="chartWidth">Intended width for the chart (in pixels)</param>
            /// <param name="chartHeight">Intended height for the chart (in pixels)</param>
            /// <param name="debugMode">Whether to start the chart in debug mode</param>
            /// <param name="registerWithJS">Whether to ask chart to register itself with JavaScript</param>
            /// <param name="transparent">Whether transparent chart (true / false)</param>
            /// <param name="bgColor">Back Ground Color</param>
            /// <param name="scaleMode">Set Scale Mode</param>
            /// <param name="language">Set SWF file Language</param>
            /// <returns></returns>
            private static string RenderChartHTMLALL(string chartSWF, string strURL, string strXML, string chartId, string chartWidth, string chartHeight, bool debugMode, bool registerWithJS, bool transparent, string bgColor, string scaleMode, string language)
            {
    
                //Generate the FlashVars string based on whether dataURL has been provided
                //or dataXML.
                StringBuilder strFlashVars = new StringBuilder();
                StringBuilder flashVariables = new StringBuilder();
                string mBGColor = "";
                string strwmode = "";
                if (strXML.Length == 0)
                {
                    //DataURL Mode
                    flashVariables.AppendFormat("&chartWidth={0}&chartHeight={1}&debugMode={2}&registerWithJS={3}&DOMId={4}&dataURL={5}", chartWidth, chartHeight, boolToNum(debugMode), boolToNum(registerWithJS), chartId, strURL);
                }
                else
                //DataXML Mode
                {
                    flashVariables.AppendFormat("&chartWidth={0}&chartHeight={1}&debugMode={2}&registerWithJS={3}&DOMId={4}&dataXML={5}", chartWidth, chartHeight, boolToNum(debugMode), boolToNum(registerWithJS), chartId, strXML);
                }
    
                flashVariables.AppendFormat("&scaleMode={0}&lang={1}", scaleMode, language);
                //Checks for protocol type.
                string isHTTPS = HttpContext.Current.Request.ServerVariables["HTTPS"];
                //Checks browser type.
                bool isMSIE = HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"].Contains("MSIE");
                //Protocol initially sets to http.
                string HTTPS = "http";
                if (isHTTPS.ToLower() == "on".ToLower())
                {
                    HTTPS = "https";
                }
                //Transparency check.
                if (transparent == true)
                {
                    strwmode = "wmode=\"transparent\"";
                }
    
                strFlashVars.AppendFormat("<!-- START Code Block for Chart {0} -->" + Environment.NewLine, chartId);
                if (isMSIE)
                {
                    strFlashVars.AppendFormat("<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"{3}://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0\" width=\"{0}\" height=\"{1}\" name=\"{2}\" id=\"{2}\" >" + Environment.NewLine, chartWidth, chartHeight, chartId, HTTPS);
                    strFlashVars.Append("<param name=\"allowScriptAccess\" value=\"always\" />" + Environment.NewLine);
                    strFlashVars.AppendFormat("<param name=\"movie\" value=\"{0}\"/>" + Environment.NewLine, chartSWF);
                    strFlashVars.AppendFormat("<param name=\"FlashVars\" value=\"{0}\" />" + Environment.NewLine, flashVariables.ToString());
                    strFlashVars.Append("<param name=\"quality\" value=\"high\" />" + Environment.NewLine);
                    if (bgColor != "")
                    {
                        strFlashVars.AppendFormat("<param name=\"bgcolor\" value=\"{0}\" />" + Environment.NewLine, bgColor);
    
                    }
                    if (transparent == true)
                    {
                        strFlashVars.Append("<param name=\"wmode\" value=\"transparent\" />" + Environment.NewLine);
                    }
                    strFlashVars.Append("</object>" + Environment.NewLine);
                }
                else
                {
                    if (bgColor != "")
                    {
                        mBGColor = "bgcolor=\"" + bgColor + "\"";
                    }
                    if (transparent == true)
                    {
                        strwmode = "wmode=\"transparent\"";
                    }
                    strFlashVars.AppendFormat("<embed src=\"{0}\" FlashVars=\"{1}\" quality=\"high\" width=\"{2}\" height=\"{3}\" name=\"{4}\" id=\"{4}\" allowScriptAccess=\"always\" type=\"application/x-shockwave-flash\" pluginspage=\"{7}://www.macromedia.com/go/getflashplayer\" {5} {6} />" + Environment.NewLine, chartSWF, flashVariables.ToString(), chartWidth, chartHeight, chartId, strwmode, mBGColor, HTTPS);
                }
    
    
                strFlashVars.AppendFormat("<!-- END Code Block for Chart {0} -->" + Environment.NewLine, chartId);
    
                StringBuilder FlashXML = new StringBuilder();
                FlashXML.AppendFormat("<div id='{0}Div' >", chartId);
                FlashXML.AppendFormat("{0}</div>", strFlashVars.ToString());
                return FlashXML.ToString();
            }
    
            /// <summary>
            /// Transform the meaning of boolean value in integer value
            /// </summary>
            /// <param name="value">true/false value to be transformed</param>
            /// <returns>1 if the value is true, 0 if the value is false</returns>
            private static int boolToNum(bool value)
            {
                return value ? 1 : 0;
            }
        }
    
  • 相关阅读:
    其实Unix很简单
    路由器硬件和操作系统软件关系之我见
    80后的我们
    虚拟机虚拟网卡作用
    [转]Cisco小失误,大麻烦
    DDWRT让我们的无线路由器用上Linux
    2011年全国大学生电子设计竞赛试题来自官网
    太网帧结构详解
    TCP/IP网络编程之四书五经
    四种以太网数据包详解
  • 原文地址:https://www.cnblogs.com/acyy/p/2662224.html
Copyright © 2011-2022 走看看