【发布时间】:2013-08-02 22:48:31
【问题描述】:
我正在使用 Visual Studio 2010 和 C# 构建一个查询两个数据库的应用程序,然后生成一个包含子报表的报表。主报表将三个参数传递给子报表。子报告在主报告的每条记录上都是空白的。因此,我将 NoRowsMessage 设置为“未返回任何内容”以确保子报表确实在显示。现在,子报告不是空白,而是返回我的消息。我已经通过预览数据和输入参数值来测试 tableadapter。结果显示很好。我的猜测是,由于某种原因,参数没有正确传递给子报表。我尝试将参数设置为允许空值并允许空值。没有什么变化。我已将 LocalReport.SubreportProcessing 设置为新的 SubreportProcessingEventHandler。我在该事件处理程序中为子报表设置了数据源。我不知道我错过了什么。任何建议都会有所帮助。
这是主窗体中的代码
private void JointAgreement_Load(object sender, EventArgs e) { // TODO:这行代码将数据加载到“termLookup.ACADEMICCALENDAR”表中。您可以根据需要移动或移除它。 this.aCADEMICCALENDARTableAdapter1.Fill(this.termLookup.ACADEMICCALENDAR); // TODO: 这行代码将数据加载到“yearLookup.ACADEMICCALENDAR”表中。您可以根据需要移动或移除它。 this.aCADEMICCALENDARTableAdapter.Fill(this.yearLookup.ACADEMICCALENDAR); }
private void button1_Click(object sender, EventArgs e)
{
string year = comboBox1.Text;
string term = comboBox2.Text;
Classes.Functions.GetStudentList(year, term);
List<ReportParameter> paramList = new List<ReportParameter>();
paramList.Add(new ReportParameter("Year", year, false));
paramList.Add(new ReportParameter("Term", term, false));
reportViewer1.LocalReport.SetParameters(paramList);
reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SetSubDataSource);
this.joint_Agreement_InfoTableAdapter.Fill(this.jointAgreementInfo.Joint_Agreement_Info);
this.reportViewer1.RefreshReport();
}
public void SetSubDataSource(object sender, SubreportProcessingEventArgs e)
{
e.DataSources.Add(new ReportDataSource("StudentDetail", tRANSCRIPTDETAILBindingSource));
}
【问题讨论】:
-
你能提供一些代码吗?
-
Functions 类中有很多代码。我从一个数据库中获取信息并对其进行处理,然后将结果放入数据库的另一个表中。该报告基于新表和另一个数据库中的另一个表。
-
我想我可能在解决这个问题上取得了一些进展。如果我添加以下行 this.transcriptdetailTableAdapter1.Fill(this.studentClasses.TRANSCRIPTDETAIL, year, term, "SomeID");点击按钮事件,在 SubreportProcessing 行上方,它将使用我传递给它的 ID 的学生填充子报告。
标签: c# visual-studio-2010 sql-server-2008 reporting-services