2011-04-14 6 views
0

데이터 세트를 작성하여 Crystal Report에 사용했습니다. 문제는 디자인 타임에 데이터를 표시 할 수 있지만 ASP.Net 페이지를 사용하여 실행하면 빈 페이지가 표시된다는 것입니다. 아래 코드는 프로그래밍 방식으로 보고서를 표시하는 데 사용하는 코드입니다.ASP.Net 페이지에 보고서를 표시 할 수 없습니다.

/// <summary> 
     /// Displays batch report 
     /// </summary> 
     /// <param name="agreementId"></param> 
     private void ShowStatements(string agreementId) 
     { 
      var crvStatements = new CrystalReportViewer(); 
      var reportDocument = new ReportDocument(); 
      reportDocument.Load(Server.MapPath("Statements.rpt")); 
      crvStatements.ReportSource = reportDocument; 
      var dt1 = new dsStatements.usp_GetBillDetailsByAgreementIdDataTable(); 
      var dt2 = new dsStatements.usp_GetTransactionTypesByAgreementIdForBillDataTable(); 
      var adapter1 = new usp_GetBillDetailsByAgreementIdTableAdapter(); 
      var adapter2 = new usp_GetTransactionTypesByAgreementIdForBillTableAdapter(); 
      adapter1.Fill(dt1, agreementId); 
      adapter2.Fill(dt2, agreementId); 
      //var statements = new dsStatements(); 
      //statements.Tables.Add(dt1); 
      //statements.Tables.Add(dt2); 
      // reportDocument.SetDataSource(dsStatements); 

      crvStatements.RefreshReport(); 
     } 

페이지에서 어떤 컨트롤도 사용하지 않았습니다. 보고서 뷰어, 보고서 소스 및 데이터 집합을 프로그래밍 방식으로 추가하고 있습니다. 제발 도와주세요. 최대한 빨리 필요합니다. CR20과 함께 VS2010을 사용 중입니다.

답변

1

단순히 페이지에서 컨트롤을 만드는 것이 아니라 런타임에 Crystal Report Viewer를 만드는 이유를 설명해 줄 수 있습니까? 어떤 사람들은이 작업을 수행하여 표시하지 않고 내보낼 수 있지만 코드가 표시되지 않습니다.

본인은 이것을 테스트하지 않았지만 귀하의 페이지에 뷰어 컨트롤이 있다면 아래에 해당한다고 생각합니다.

private void ShowStatements(string agreementId) 
    { 
     //var crvStatements = new CrystalReportViewer(); //created on the page 
     ReportDocument reportDocument = new ReportDocument(); 
     reportDocument.Load(Server.MapPath("Statements.rpt")); 
     crvStatements.ReportSource = reportDocument; 
     System.Data.DataTable dt1 = new dsStatements.usp_GetBillDetailsByAgreementIdDataTable(); 
     System.Data.DataTable dt2 = new dsStatements.usp_GetTransactionTypesByAgreementIdForBillDataTable(); 
     System.Data.DataSet statements = new System.Data.DataSet(); 
     statements.Tables.Add(dt1); 
     statements.Tables.Add(dt2); 
     reportDocument.SetDataSource(dsStatements); 

     crvStatements.DataBind(); 
    } 

나는 보고서가 보고서에 연결이 테이블로 설정되어 있으리라 믿고있어, 크리스탈은 내 해당 테이블에 각 데이터 테이블을 매핑하는 방법을 알 수 있도록 당신은 datatables에 이름을 지정해야 할 수도 있습니다 보고서. 가능한 경우로드 논리가 처리 될 때까지 보고서를 단일 테이블을 허용하도록 제한 할 수 있습니다.

이러한 각 데이터 테이블이 하위 보고서의 데이터를 나타내는 경우 해당 보고서를 반복하고 데이터 소스를 수동으로 설정해야합니다.

나는 이것이 도움이되기를 바란다. 그러나 나는 이것을 머리 꼭대기에서 해답을 주었고 아마도 내가 놓친 것들이있을 것이다. 작동하지 않는 경우 의견을 보내 주시면 모든 문제를 해결할 수 있습니다.

+0

내 컴퓨터에 VS2008 및 VS 2010이 모두 설치되어 있습니다. 또한 두 버전 모두에 대한 수정 보고서를 제공합니다. 하지만 ASP.Net 페이지에 컨트롤을 놓으면 오류가 표시됩니다. 오류에 따르면 내 컴퓨터에는 CR 버전 10과 CR 버전 13이 모두 설치되어 있습니다. 그러나 VS2010. 버전 13을 참조하는 대신 버전 10을 사용합니다. 버전 간에는 어떤 종류의 충돌이 있습니다. –

+0

어쨌든 Microsoft Report로 전환했으며 문제가 해결되었습니다. 시간을내어 주셔서 감사합니다. –

1

RefreshReport();은 보고서가 비어있는 것처럼 보입니다. 데이터 집합을로드하기 전에 시도하십시오.

+0

아니, 문제가되지 않습니다 –

관련 문제