- 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.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;public partial class CrystalRPT_MultiReport_Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { Multy multy = new Multy(); Multy.SalesDataTable dt = multy.Sales; MultyTableAdapters.SalesTableAdapter adapter = new MultyTableAdapters.SalesTableAdapter(); adapter.Fill(dt); crSource.ReportDocument.SetDataSource(multy); crSource.DataBind(); }}