2011-12-14 2 views
3

rdlc 보고서를 만들었습니다. 내 양식에 reportViewer가 있습니다. 보고서를로드하려고하면 "보고서 'xxxx.rdlc에 대한 보고서 정의가 지정되지 않았습니다"가 표시됩니다. 나는 이것을 알아낼 수 없다. 보고서에 필요한 데이터가있는 데이터 테이블이 있습니다. 이 dataTable을 가져 와서 데이터베이스 "FinalReport"에 다시로드합니다. (내가 이것을하고있는 이유는 rdlc에 일종의 dataSource가 필요하기 때문입니다.) 보고서 (table1)에 테이블이 있습니다.내 RDLC 보고서에서 'xxxx.rdlc'보고서의 보고서 정의가 지정되지 않았습니다. "

this.finalDataReportTableAdapter.Fill(this.nehasitDataSet.FinalDataReport); 
localReport.ReportEmbeddedResource = @"Resources\VisibleAssets.rdlc"; 
//I'm not so sure about the following line, but it's the only line that prevented me from getting an error ("no reportdefinition defined" 
using (StreamReader rdlcSR = new StreamReader(@"Resources\VisibleAssets.rdlc")) 
{ 
    localReport.LoadReportDefinition(rdlcSR); 

    localReport.Refresh(); 
} 

this.reportViewer.RefreshReport(); 

내가 또한 데이터 테이블에 대한 보고서와 보고서에의 ReportViewer 연결 : 이 (보고서 뷰어가있는 내 양식, 내부) 내 코드입니다. 정말 문제가 보이지 않고 Google에서 검색했습니다.

도움이 될 것입니다.

+1

'reportViewer.LocalReport.ReportPath' 속성을 보고서 경로로 설정해 보았습니까? – jadarnel27

+1

안녕하세요. 내가 가지고 있기 때문에 나는 필요가 없다 : localReport.ReportEmbeddedResource = @ "Resources \ VisibleAssets.rdlc"; –

답변

0

localReport와 reportViewer는 어디에 연결합니까? 대신에 :

using (StreamReader rdlcSR = new StreamReader(@"Resources\VisibleAssets.rdlc")) 
    { 
     localReport.LoadReportDefinition(rdlcSR); 

     localReport.Refresh(); 
    } 

내가 사용 :

using (StreamReader rdlcSR = new StreamReader(@"Resources\VisibleAssets.rdlc")) 
    { 
     reportViewer1.LocalReport.LoadReportDefinition(rdlcSR); 

     reportViewer1.LocalReport.Refresh(); 
    } 

을 그리고 그것은 나를 위해 일하게 될 것으로 보인다.

1

동일한 오류가 발생했지만 보고서를 다른 방식으로로드하고 있습니다. 나는 MSDN에 지시를 따랐다. 그들이 참조 번호가 ReportEmbeddedResource 인 경우를 제외하고는 ReportPath을 사용했습니다. 그 변경을하면 보고서가로드됩니다. 내 XAML은 또한

<Page x:Class="MyProject.Views.ReportViewer" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xm![enter image description here][2]lns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300" 
    Title="ReportViewer"> 

    <Grid> 
     <WindowsFormsHost> 
      <rv:ReportViewer x:Name="_reportViewer"/> 
     </WindowsFormsHost> 
    </Grid> 
</Page> 

인으로

public partial class ReportViewer : Page 
{ 
    private bool _isReportViewerLoaded; 

    public ReportViewer() 
    { 
     InitializeComponent(); 
     _reportViewer.Load += _reportViewer_Load; 
    } 

    void _reportViewer_Load(object sender, EventArgs e) 
    { 
     if (!_isReportViewerLoaded) 
     { 
      Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = new Microsoft.Reporting.WinForms.ReportDataSource(); 
      BossbergDataset dataset = DataAccessConstants.myDataset; 

      dataset.BeginInit(); 

      reportDataSource1.Name = "DataSet1"; //Name of the report dataset in our .RDLC file 
      reportDataSource1.Value = dataset.Table1; 
      this._reportViewer.LocalReport.DataSources.Add(reportDataSource1); 
     //My testReport.Rdlc has the [Copy to Output Directory] set to [Copy Always] 
      this._reportViewer.LocalReport.ReportPath = @"Reports/TestReport.rdlc"; 

      dataset.EndInit(); 

      DataAccessConstants.Table1Adapter.Fill(dataset.Table1); 

      _reportViewer.RefreshReport(); 

      _isReportViewerLoaded = true; 
     } 
    } 
} 

:

  • 당신이 당신의 출력 디렉터리에 보고서 파일을 복사해야합니다. ../../Myreport.rdlc과 같은 구문을 사용하는 경우 출력 디렉토리에 복사하지 않을 수도 있습니다. Output Directory requirements

  • ReportViewer dll의 올바른 버전을 참조하고 있는지 확인하십시오. References> Add Reference ...> Assemblies> Extensions로 이동하여 보고서 뷰어 dll을 찾았습니다. 이전 버전이었습니다. 나는 명시 적으로 최신을 찾으려면

    C:\Program Files (x86)\Microsoft Visual Studio 12.0\ReportViewer\Microsoft.ReportViewer.WinForms.dll

    로 이동해야했습니다. 오류가 발생하면

    보고서 정의가 유효하지 않습니다. 세부 정보 : 보고서 정의에 업그레이드 할 수없는 잘못된 대상 네임 스페이스 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition'이 있습니다.

1

IIS에 동일한 응용 프로그램을 게시하는 경우에만 발생할 수있는이 문제 때로는 문제를 일으키는 몇 가지 이유가 있습니다. 보고서 파일 (*.RDLC) 관련 위치에 존재하고 문제가 여전히 당신이 그것을 해결하기 위해 다음과 같은 방법을 시도 할 수 있습니다 계속된다

"LocalReport.ReportEmbeddedResource Property on MSDN
에서를 ... 내장 된 보고서 리소스는이 보고서 정의는 호출 어셈블리에 리소스로 저장되었습니다. ReportPath 속성이 설정되면 ReportEmbeddedResource 속성은 무시됩니다. 또한 LoadReportDefinition로드 보고서가 무시됩니다 "

변경 :.

reportViewer.LocalReport.ReportPath = Server.MapPath("~/Reporting/YourReportName.rdlc"); 

에 : 다음

rw.LocalReport.ReportEmbeddedResource = "YourFullNamespace.Reporting.YourReportName.rdlc"; 

그리고에서 Embedded ResourceBuild Action 속성을 변경 YourReportName.rdlc의 등록 정보 ... 희망이 도움이

정확히 RDLC 그것은 보고서 뷰어에서 까다로운 문제이고 그것이 내가 바인딩하는 방법을 썼다 해결 : 데이터 소스의 일종을 필요로하기 때문에 당신이 말한 것처럼


0

데이터 테이블에서 직접 보고서 :

private void GenerateReportDirect(ReportViewer reportViewer, string datasource, DataTable dt, string reportpath) 
{ 
    reportViewer.LocalReport.ReportPath = reportpath; 
    ReportDataSource repds = new ReportDataSource(datasource, dt); 
    reportViewer.LocalReport.DataSources.Clear(); 
    reportViewer.LocalReport.DataSources.Add(repds); 
    reportViewer.LocalReport.Refresh(); 
} 

이 방법을 구현하는 당신은 그냥 이름 만 데이터 테이블에서 바인딩 할 데이터를 취할 것입니다 우리의 보고서 (우리가 속임수 것이다 세트 테이블 어댑터의 문자열을 넣어 지정해야 우리의 보고서 뷰어 :))

private void BindReport(DataTable dt) 
    { 
      string reportPath = Server.MapPath("StudentBus.rdlc"); 
      GenerateReportDirect(ReportViewer1, "StudentDataSet_usp_RPT_StudentBus", dt, reportPath); 
    } 

나는 이것이 도움이되기를 바랍니다. :)

0

동일한 문제가 내 보고서에서 발생했습니다. 그것은 로컬 임베디드 보고서였습니다.

  1. 나는 ReportEmbeddedResource 속성 집합이 없습니다.
  2. ReportEmbeddedResource property으로 설정했을 때 보고서 이름에 대신에 myApp.reports.rptMyJobstatus.rdlc의 대소 문자가 있기 때문에 오류가 계속 발생했습니다.

따라서 이러한 조건을 모두 확인해야합니다.

관련 문제