子报表"子报表 1"的数据检索失败,位于



我正在尝试让一个子报表正常工作。我正在使用VS 2010。我在我的主报告中插入了一个"Subreport1",并不断收到错误:位于…的子报告"Subreport1"的数据检索失败

这是我的代码:

public partial class rptEngOrd : Form
{
    public rptEngOrd()
    {
        InitializeComponent();
    }
    private List<EngOrd> eoNumParam;
    private string eonum;
    private DataSet dsReport;
    private DataSet dsSubReport;
    private void rptEngOrd_Load(object sender, EventArgs e)
    {
        LoadComboBoxes();
    }
    private void LoadComboBoxes()
    {
        try
        {
            eoNumParam = EngOrdDB.GetDistinctEONum();
            cboEONum.DataSource = eoNumParam;
            cboEONum.SelectedIndex = -1;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, ex.GetType().ToString());
        }
    }
    private void btnPreview_Click(object sender, EventArgs e)
    {
        try
        {
            if (cboEONum.SelectedValue.ToString().Equals("zALL"))
            {
                eonum = "";
            }
            else
            {
                eonum = cboEONum.SelectedValue.ToString();
            }
            //get the data
            dsReport = EngOrdDB.GetEngOrdbyEONum(eonum);
            //provide local report information to viewer
            reportViewer1.LocalReport.ReportEmbeddedResource = "CustomMenu.rptEngOrd.rdlc";
            reportViewer1.ProcessingMode = ProcessingMode.Local;
            //prepare report data source
            ReportDataSource rds = new ReportDataSource();
            rds.Name = "dsReport";
            rds.Value = dsReport.Tables[0];
            reportViewer1.LocalReport.DataSources.Clear();
            reportViewer1.LocalReport.DataSources.Add(rds);
            //prepare sub report data source
            dsSubReport = EngOrdTaskDB.GetEngOrdTaskbyEONum(eonum);
            ReportDataSource rdsSub = new ReportDataSource();
            rdsSub.Name = "dsSubReport";
            rdsSub.Value = dsSubReport.Tables[0];
            reportViewer1.LocalReport.DataSources.Add(rdsSub);
            reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(srptProcessingEventHandler);
            //load the report viewer
            reportViewer1.LocalReport.Refresh();

            //MessageBox.Show(eonum);
        }
        catch (Exception ex)
        {
            //display generic message back to user
            MessageBox.Show(ex.Message);
        }
        finally
        {
        }
        reportViewer1.RefreshReport();
    }
    private void srptProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
    {
        ReportDataSource r = reportViewer1.LocalReport.DataSources[1];
        e.DataSources.Add(r);
    }       
}

我发现了一个帮助我填充子报告数据的链接,根据域模型进行报告,你可以在页面中间找到你感兴趣的代码。

顺便说一下,我认为您应该只在事件处理程序中填充和添加数据

private void srptProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
{
    dsSubReport = EngOrdTaskDB.GetEngOrdTaskbyEONum(eonum);
    e.DataSources.Add(new ReportDataSource “dsSubReport”, dsSubReport.Tables[0]));
}  

然后从单击事件中删除此代码。

//prepare sub report data source
dsSubReport = EngOrdTaskDB.GetEngOrdTaskbyEONum(eonum);
ReportDataSource rdsSub = new ReportDataSource();
rdsSub.Name = "dsSubReport";
rdsSub.Value = dsSubReport.Tables[0];
reportViewer1.LocalReport.DataSources.Add(rdsSub);

这样我就应该工作了。希望这能帮助

相关内容

最新更新