我按照一些帖子上所教的方法进行自定义微软报表的数据源,可是运行起来发现页面在不停的刷新,报表一直处在“加载”的状态。源代码贴出来,大家看看怎么回事?开发工具是VS2010+SQL2008后台:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Reporting.WebForms;public partial class _Default : System.Web.UI.Page
{
    MyDbEngine SqlEngine = new MyDbEngine();//这是我自己写的一个SQL执行类,没有问题的。
    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = GetData();
        ReportDataSource rds = new ReportDataSource("DataSet1", dt);
        ReportViewer1.LocalReport.DataSources.Clear();
        ReportViewer1.LocalReport.DataSources.Add(rds);
        ReportViewer1.LocalReport.Refresh();
    }    public DataTable GetData()
    {string str="select * from MeetRoom_info";
   DataSet ds= SqlEngine.ExecuteDataSet(str);
   return ds.Tables [0];   
    }
}页面代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>    <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" 
        Font-Size="8pt" InteractiveDeviceInfos="(集合)" WaitMessageFont-Names="Verdana" 
        WaitMessageFont-Size="14pt">        <LocalReport ReportPath="Report.rdlc">
            <DataSources>
                <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1" />
            </DataSources>
        </LocalReport>
    </rsweb:ReportViewer>    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
        TypeName="DataSet1TableAdapters."></asp:ObjectDataSource>      
    </form>
</body>
</html>

解决方案 »

  1.   

    自己解决了!好费一番周折啊!其实原因很简单。
    一、就是在加载报表前加上 if (!IsPostBack)进行判断是否页面回发,就不会出现报表不停加载的情况了。
    二、ReportDataSource rds = new ReportDataSource("参数1", 参数2);中,参数1必须是报表之前设定的数据集的名称,参数2是该数据集中的表,如果默认就一个表,一般就写成“数据集.table[0]”.这个问题整整困扰了我三天三夜,最后终于搞定了,问了好多人都没用结果,最后自己解决了,真是求人不如求己啊!正确的代码贴出来,希望大家少走弯路。
    后台代码:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using Microsoft.Reporting.WebForms;public partial class _Default : System.Web.UI.Page
    {
        MyDbEngine sqlengine = new MyDbEngine();    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string str = "select * from MeetingOrder_info where OrderID=23112";
                DataSet DataSet1 = sqlengine.ExecuteDataSet(str);
                this.ReportViewer1.Reset();
                this.ReportViewer1.LocalReport.ReportPath = "Report.rdlc";
                this.ReportViewer1.LocalReport.DataSources.Clear();
                this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", DataSet1.Tables[0]));
                this.ReportViewer1.LocalReport.Refresh();
            }
           
        }
    }前台代码:
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
        </div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" 
            Font-Size="8pt" InteractiveDeviceInfos="(集合)" WaitMessageFont-Names="Verdana" 
            WaitMessageFont-Size="14pt" Width="653px">
            <LocalReport ReportPath="Report.rdlc">
                <DataSources>
                    <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1" />
                </DataSources>
            </LocalReport>
        </rsweb:ReportViewer>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
            SelectMethod="GetData" 
            TypeName="DATABASEDataSetTableAdapters.MeetingOrder_infoTableAdapter">
        </asp:ObjectDataSource> 
        </form>
    </body>
    </html>
    注意对比红色部分。
      

  2.   

    能不能把你做的这个小项目发我看看啊。。谢谢了。。
    [email protected]
      

  3.   

    你好,我按照你这样做了,好像还是不能显示,能不能把 你的项目文件发给我,看看。谢谢啊,[email protected]
      

  4.   

    我也在需要这个,可以发来看看吗?万分感谢[email protected]