现在的位置: 首页 > 综合 > 正文

FineUI中点击按钮显示FusionChart图表

2019年10月16日 ⁄ 综合 ⁄ 共 2725字 ⁄ 字号 评论关闭
</pre><p></p><p>以前JSP的项目中用到Fusionchart都是这样:</p><p>JSP页面中在要显示图表的地方写上这么一段:</p><p></p><pre code_snippet_id="117421" snippet_file_name="blog_20131218_1_6950141" class="java" name="code">      <td>
			  		<% 
			  			String data = (String)request.getAttribute("measureEquipment");
			  			String error = (String)request.getAttribute("error");
			  			if(data != null){
			  		%>
			  		    <div id="measure" align="center" ></div>
			      	     <script type="text/javascript">
					         var chart = new FusionCharts("charts/swf/MSColumn3D.swf", "measure", "1000", "350", "0", "0");
					         chart.setDataXML("<%=data%>");
					         chart.render("measure");
					        </script>
				   <%
				   		}				   		
						if(error != null){				   
				    %>
				          <div align="center"><strong>没有符合条件的数据</strong></div>
				    <%} %>
			  	</td>

点击按钮的时候,查询条件的form会提交到一个action,后台的action查询数据库,然后构造Fusionchart的XML,然后将构造好的XML写入到response,action的结果页面还是这个页面,所以这个页面重刷的时候就会显示出图表。

现在想在一个ASP.NET(其实我是用的FineUI,一个基于ExtJS+ASP.NET的控件库)项目中用Fusionchart,问题是ASP.NET是先执行后台的cs文件,然后再加载前台的aspx页面的,想要先加载完了页面,再点击一个按钮的时候,再查询数据库,显示出图表有点难度,除非点了按钮之后再次重刷界面。。。 肯定不好。

于是参考了Fusionchart的官方实例,发现全都是在cs文件中page_load()函数执行的时候,将XML数据返回给页面上的Literal控件:

<%@ Page Language="C#" AutoEventWireup="false" CodeFile="BasicDataXML.aspx.cs" Inherits="BasicExample_BasicDataXML" %>
<HTML>
  <HEAD>
    <TITLE>
      FusionCharts Free - Simple Column 3D Chart using dataXML method
    </TITLE> 
  </HEAD>
  <BODY>
     <asp:Literal ID="FCLiteral" runat="server"></asp:Literal>
  </BODY>
</HTML>

protected void Page_Load(object sender, EventArgs e)
   {
      // Generate chart in Literal Control
     strXML = CreateCharts(); 
     FCLiteral.Text = FusionCharts.RenderChartHTML("../FusionCharts/FCF_Column3D.swf", "", strXML, "myNext", "600", "300", false);
   }

但是这样不能实现我要的点击按钮显示图表啊,于是我试了试点击按钮的时候执行这段:

// Generate chart in Literal Control
     strXML = CreateCharts(); 
     FCLiteral.Text = FusionCharts.RenderChartHTML("../FusionCharts/FCF_Column3D.swf", "", strXML, "myNext", "600", "300", false);

这样不但不管用,甚至连整个页面都没办法显示了。
在pageload中绑定数据谁不会啊,我还会在页面上执行onReady()这个JS函数的之后绑定数据呢,像这样:

<div id="StackedColumn3D">StackedColumn3D</div>

<script type="text/javascript">
	function OnReady()
{
    var chart = new FusionCharts("chart/swf/StackedColumn3D.swf", "ChartId", "600", "300", "0", "0");
    chart.setDataURL("chart/xml/StackedColumn3D.xml");
    chart.render("StackedColumn3D");
}
		    </script>

=================================
继续想,想到既然页面加载的时候执行我这段JS代码是可以显示图表的,为何不能再点击按钮的时候,在后台(因为要访问数据库,所以必须是后台)调用执行我这段JS代码呢?
于是在网上搜索怎么在ASP.NET后台调用执行JS代码,试了下面两种方法:

Response.Write("<script type='text/javascript'>alert('ssssss');</script>");
ClientScript.RegisterStartupScript(this.Page.GetType(), "js", "Ceshi()", true);

还是不行啊,根本没反应,JS代码压根没执行,然后我觉得可能是我使用的框架是FineUI导致的,于是我又搜索怎么在FineUI中调用执行JS代码,像下面这样写之后终于成功了:

protected void Button1_Click(object sender, EventArgs e)
        {
            string ss = "var chart = new FusionCharts(\"chart/swf/MSColumn3D.swf\", \"StackedColumn3D\", \"1000\", \"350\", \"0\", \"0\"); " 

+
                "chart.setDataXML(\"" + GetChartXMLData() + "\"); " +
                "chart.render(\"StackedColumn3D\"); ";
            PageContext.RegisterStartupScript(ss);
        }

点击统计按钮显示Fusionchart图表:

抱歉!评论已关闭.