0

我有 CrystalReport 页面,下面的代码只是通过 FormLoad 和使用 !Page.IsPostBack 加载一次,如果我再次尝试重新加载它会给我错误“加载报告失败”。

  if (!Page.IsPostBack)
     {
        cmd = new SqlCommand("SELECT * FROM [tbJournals]", cnn);
        cnn.Open();
        da = new SqlDataAdapter(cmd);
        dt = new DataTable("tbl");
        da.Fill(dt);
        cnn.Close();

        _rdStudents = new ReportDocument();
        _rdStudents.Load(Server.MapPath("~\\Accounting\\Journal_Report.rpt"));
        _rdStudents.SetDatabaseLogon("sa", "password", ".\\SQLEXPRESS", "GoldenDeveloper");
        _rdStudents.SetDataSource(dt);
        CrystalReportViewer1.ReportSource = _rdStudents;
        CrystalReportViewer1.RefreshReport();
     }

但是我想做的是把这段代码放在 CommandButton 下以更改搜索变量以制作 SQL 语句,例如

SELECT * FROM [tbJournals] where [Date] = '"+ txtDate.Text +"'

但是,一旦我将代码而不是 FormLoad 放到 CommandButton 中,就会出现错误“加载报告失败”。

提前致谢 ....

4

2 回答 2

0

我想下一次,当你重新加载然后

(!IsPostBack)
{
//This works only when the first time page loads.
}

所以用同样的代码写的代码不会被执行。试着在Page_Load中写代码,在这个函数之后,比如:

protected void Page_Load(object sender, EventArgs e)
{
cmd = new SqlCommand("SELECT * FROM [tbJournals]", cnn);
cnn.Open();
da = new SqlDataAdapter(cmd);
dt = new DataTable("tbl");
da.Fill(dt);
cnn.Close();

_rdStudents = new ReportDocument();
_rdStudents.Load(Server.MapPath("~\\Accounting\\Journal_Report.rpt"));
_rdStudents.SetDatabaseLogon("sa", "password", ".\\SQLEXPRESS", "GoldenDeveloper");
_rdStudents.SetDataSource(dt);
CrystalReportViewer1.ReportSource = _rdStudents;
CrystalReportViewer1.RefreshReport();
} 
于 2013-11-11T07:16:53.163 回答
0

终于解决了,问题出在报告路径中,我将“CrystalReportViewer”报告路径留空,并_rdStudents.Load(Server.MapPath("Journal_Report.rpt")); 使用 Server.MapPath将报告路径设置为这样

于 2013-11-11T11:05:21.030 回答