首页 新闻 搜索 专区 学院

web水晶报表打开后,总是显示“您请求的报表需要更多信息”对话框。

0
悬赏园豆:20 [待解决问题]

ReportDocument rd = new ReportDocument();
rd.Load(Server.MapPath("~/Reports/CR_PrintPurchase.rpt"));
rd.SetDataSource(Common.Tool.ToDataTable<Model.view_purchase>(listPurchaseOrderDetail));
rd.Subreports[0].SetDataSource(CreateData(Session["printPurchaseOrder"].ToString()));

CrystalReportViewer1.ReportSource = rd;

我本猿类的主页 我本猿类 | 初学一级 | 园豆:2
提问于:2013-07-02 17:45
< >
分享
所有回答(3)
0

如果report创建时用的是数据库stored procedure 或者是 query,  你应该传入数据库的server name, database name, user, password, 这样report可以去数据库取数据。

而如果你想直接把数据传给report, 那么report创建时数据源应该选ADO.NET dataset.

gunsmoke | 园豆:3592 (老鸟四级) | 2013-07-04 10:58
0

是子报表的问题,使用了XML数据源,路径写死了,换台机器就会路径不对,应该使用xsd文件配置xml数据源,使用Server.Mappath

我本猿类 | 园豆:2 (初学一级) | 2013-07-04 11:29
0

参考:http://blog.csdn.net/babyt/article/details/4610054

以下为该页面原内容

--------------------------------------------------------------------------

我们经常会遇到这样的情况,当前显示好的,在翻页、导出、打印等动作的时候,出出现无数据,或者需要重新登陆数据库的提示。 
这是因为这些动作都重新触发了页面,导致我们前一次的操作丢失了。 
所以之前的代码,我一直是写在Page_load里的,但是这样一是不能解决所有的问题,特别是涉及到有参数传递等情况。 
二是可能会多次请求数据库,导致资源的消耗。 

前面说到既然是状态丢失,那么我们可以用.Net里的session,cache或viewstate来进行保持状态。 

这里我用session做一个范例,场景是这样的: 
一个PUSH模式的报表,带一个参数p1. 
界面上有一个Button,点击后展现报表。然后报表可以进行翻页、打印和导出(这些是工具条实现的,不进行编码实现)而不会出现错误提示。 

其实只要改造两处地方即可,注意红色的部分。 

public partial class _Default : System.Web.UI.Page 

    protected void Page_Load(object sender, EventArgs e) 
    { 
        //使用Session保持ReportDocument对像 
        //每次页面更新时,不再需要重新走数据库 
        //注意:如果是VS2008,这段代码要放到Page_Init事件中 
        If (Session["myRpt"]!=null) then 
        { 
        CrystalReportViewer1.ReportSource = (ReportDocument)Session["myRpt"]; 
        } 

    } 

  //点击按钮后,报表进行第一次呈现 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
        //连接字串 
        String connstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/CrZen/testall.mdb;"; 
        OleDbDataAdapter da = new OleDbDataAdapter(); 
        OleDbConnection cn = new OleDbConnection(connstr); 
        
        da = new OleDbDataAdapter("SELECT * From RPT_CR_TEST1", cn); 
        DataSet2 dt1 = new DataSet2(); 
        da.Fill(dt1, "RPT_CR_TEST1"); 
        ReportDocument myReport = new ReportDocument(); 
        string reportPath = Server.MapPath("crystalreport1.rpt"); 
        myReport.Load(reportPath); 

        //绑定数据集,注意,一个报表用一个数据集。 
        myReport.SetDataSource(dt1.Tables[0]); 
        myReport.SetParameterValue("p1","参数测试"); 
        CrystalReportViewer1.ReportSource = myReport; 
        
        //保存到Session 
        Session["myRpt"]=myReport; 
        
    } 
  

木子宜居 | 园豆:202 (菜鸟二级) | 2016-10-18 19:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册