日期:2014-05-18  浏览次数:20457 次

一个很菜的水晶报表问题
C# code

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 System.Data.SqlClient;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataSet ds = RtDs();
            ReportDocument poRpt = new ReportDocument();
            poRpt.Load(HttpContext.Current.Server.MapPath("./CrystalReport.rpt"));
            poRpt.SetDataSource(ds);
            this.CrystalReportViewer1.ReportSource = poRpt;
        }
    }

    public DataSet RtDs()
    {
        SqlConnection con = new SqlConnection("xxxxx");
        string sql = "select * from a001a001";
        SqlCommand cmd = new SqlCommand(sql, con);
        SqlDataAdapter adp = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        try
        {
            adp.Fill(ds);
            return ds;
        }
        catch (Exception e)
        {
            throw e;
        }
    }
}



ds里肯定有内容,但是我用这个代码绑定报表的话一直报错,错误是:


“/WebSite1”应用程序中的服务器错误。
--------------------------------------------

该报表不包含表。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: CrystalDecisions.CrystalReports.Engine.DataSourceException: 该报表不包含表。

源错误: 


行 21: ReportDocument poRpt = new ReportDocument();
行 22: poRpt.Load(HttpContext.Current.Server.MapPath("./CrystalReport.rpt"));
行 23: poRpt.SetDataSource(ds);
行 24: this.CrystalReportViewer1.ReportSource = poRpt;
行 25: }
 

源文件: c:\WebSite1\Default.aspx.cs 行: 23 

堆栈跟踪: 


[DataSourceException: 该报表不包含表。]
  CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type) +169
  CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataSet dataSet) +55
  _Default.Page_Load(Object sender, EventArgs e) in c:\WebSite1\Default.aspx.cs:23
  System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
  System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
  System.Web.UI.Control.OnLoad(EventArgs e) +99
  System.Web.UI.Control.LoadRecursive() +47
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436

 


--------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433 

我主要是想实现动态填充水晶报表的功能,哪位前辈知道具体怎么做的请指点下~


------解决方案--------------------
你的错误是 CrystalReport.rpt 这个文件没有链接数据集
你添加一个数据集 然后链接下数据库把select * from a001a001 (a001a001 )这个表托上去 让数据集里面有这个表的所有字段
保存 在运行就OK了
------解决方案--------------------
补充下
首先添加新文件 添加DATASET文件 数据集
然后进入DATASET文件链接数据库
把你那个表拓进去就可以了 他会自动出现这个表的所有字段

之后打开 CrystalReport.rpt 这个报表,给这个报表添加数据源。
数据源就链接这个DATASET数据集文件 同样把表付给CrystalReport.rpt 报表 保存
你的报表之所以不能运行 就是CrystalReport.rpt 少了个数据源
------解决方案--------------------
C# code
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Securi