现在手头有一项目 后台代码
 protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
              Query();
            }
        } private void Query()
        {
            Hashtable queryItems = new Hashtable();            DataTable dt = Organ.Query(queryItems);
            GV.DataSource = dt;
            GV.DataBind();
            
        }
 public string GetMonthlySalesChartHtml()
        {
           
            Hashtable queryItems = new Hashtable();            DataTable dt = Organ.Query(queryItems);
            StringBuilder xmlData = new StringBuilder();
            xmlData.Append("<chart caption='Monthly Unit Sales' xAxisName='Month' yAxisName='Units' showValues='0' formatNumberScale='0' showBorder='1'>");
            for (int i = 0; i < dt.Rows .Count  ; i++)
            {
             
                xmlData.AppendFormat("<set label='{0}'value= '{1}'/>", dt.Rows[i]["ORGANAME"].ToString(), dt.Rows[i]["ORGANID"].ToString());
               
            }
            xmlData.Append("</chart>");            return FusionCharts.RenderChartHTML("http://192.168.1.199/ib/Charts/Column3D.swf", "", xmlData.ToString(), "myNext", "600", "300", false);
     
        }
页面代码
    <div>
    
        <asp:GridView ID="GV" runat="server" AutoGenerateColumns="False">
        <Columns>
        <asp:BoundField DataField="ORGANID" HeaderText="编号" />
         <asp:BoundField DataField="ORGANAME" HeaderText="部门" />                           
         </Columns>
        </asp:GridView>
    
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    
    </div>
    <div>
    <%=GetMonthlySalesChartHtml()%> 
    <% %>>
    </div>方法Query() 和GetMonthlySalesChartHtml()
用的都是同一个数据
方法Query()这个在页面绑定了的GridView 
GetMonthlySalesChartHtml()页面显示flash图表 
但是这查询了2次数据库  由于数据都是一样的  请问如何能够做到只查询一次

解决方案 »

  1.   

    取出数据 放在页面上的datatable/dataset 里面,用的时候就绑定/调用
      

  2.   

    你可以直接在Load事件里面查出数据源来然后直接传到方法里面进行绑定啊。
    可以加个缓存
      

  3.   

    private DataTable dt:protected void Page_Load(object sender, EventArgs e)
      {
      if (!Page.IsPostBack)
      {
      dt = Organ.Query(queryItems);  Query();
      }
      } private void Query()
      {
      Hashtable queryItems = new Hashtable();  //DataTable dt = Organ.Query(queryItems);
      GV.DataSource = dt;
      GV.DataBind();
        
      }
     public string GetMonthlySalesChartHtml()
      {
        
      //Hashtable queryItems = new Hashtable();  //DataTable dt = Organ.Query(queryItems);
      StringBuilder xmlData = new StringBuilder();
      xmlData.Append("<chart caption='Monthly Unit Sales' xAxisName='Month' yAxisName='Units' showValues='0' formatNumberScale='0' showBorder='1'>");
      for (int i = 0; i < dt.Rows .Count ; i++)
      {
        
      xmlData.AppendFormat("<set label='{0}'value= '{1}'/>", dt.Rows[i]["ORGANAME"].ToString(), dt.Rows[i]["ORGANID"].ToString());
        
      }
      xmlData.Append("</chart>");  return FusionCharts.RenderChartHTML("http://192.168.1.199/ib/Charts/Column3D.swf", "", xmlData.ToString(), "myNext", "600", "300", false);
        
      }
      

  4.   

    楼上的大侠  请问如果不止一个DataTable呢?
      

  5.   

    放缓存里比如Cache["dt1"]=ds 
     
     
     
    ----------------------------------签----------名----------栏----------------------------------
      

  6.   

    使用数据集  DataSet  可以同时存放多个DataTable     只需要和数据库交互一次。     
      

  7.   

    DataTable (DataTable)GV.DataSource;或者,你在页面加qqldatasource or objectdatasource控件,
      

  8.   

    来学习了,不过可以考虑用一个HiddenFied 控件存放读取的数据