2012-06-20 40 views
3

我用我的形式ReportViewer控件:的WebForms的ReportViewer数据源错误

<form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <rsweb:ReportViewer ID="ReportViewer1" runat="server"> 
    </rsweb:ReportViewer> 
</form> 

报告页面代码文件中的文件路径初始化:

protected void Page_Init(object sender, EventArgs e) 
{ 
    ReportViewer1.LocalReport.ReportPath = "Reports/Source/Untitled.rdlc"; 
} 

当报告呈现,我得到了一个错误:

A data source instance has not been supplied for the data source 'DataSet1'. 

连接正常工作(我测试了它),并且当我尝试在MS SQL Server Report Builder中运行我的报告时 - 它也能正常工作(生成报告)。

回答

5

在您的rdlc报告中,有一个名为“DataSet1”的数据集,您在设计报告时添加了该数据集。您需要传递此数据集将用于呈现报告的数据。

这是通过localreport数据源集合完成的。请注意,它是复数,意味着您的报表中可以有多个数据集。

ReportViewer1.LocalReport.DataSources.Clear(); 

ReportDataSource rds = new ReportDataSource(); 
rds.Name = "DataSet1"; //this is the name of the DataSet on your report rdlc 
rds.Value = datatable; //this contains the data and columns referenced in the dataset 

ReportViewer1.LocalReport.DataSources.Add(rds); 

如果你看看下面你的标签会看到什么的ReportViewer预计

<rsweb:ReportViewer ID="ReportViewer1" runat="server"> 
<LocalReport ReportPath="Report1.rdlc"> 
    <DataSources> 
     <rsweb:ReportDataSource Name="DataSet1" /> 
    </DataSources> 
</LocalReport> 
</rsweb:ReportViewer> 

更新

对于第二部分,DataSet11已经宣布的数据源,只是参考它在代码隐藏中传递数据为Value

ReportViewer1.LocalReport.DataSources["DataSet1"].Value = myData; 
+0

我已经完成了答案的第二部分(.aspx内容) - 现在我看到了导航,但下面显示错误:'在报告处理过程中发生错误。 DataSet1'我应该做第一部分(代码隐藏)吗? –

+0

我将更新我的答案以支持第二部分 - 仍然需要隐藏代码 – codingbiz

+0

*'报告处理期间发生错误。 DataSet1'*可能是因为.rdlc文件的路径不正确。 – codingbiz