【发布时间】:2020-05-22 18:45:20
【问题描述】:
我的 ASP C# 应用程序有一个带有主报表的 Crystal 报表和一个位于主报表本身内的子报表。我的主报告列出了学生,而子报告预计会列出列出的学生的分数列表。 单击按钮时,我正在填充主报告的数据表,效果很好。但是,不知道如何链接主报告和子报告。我已经定义了一个链接两个数据集的参数,但是我不知道如何在单击按钮时填充第二个数据表。 希望有一些样本,我在搜索几个小时后找不到(主要是因为我不知道要搜索的正确术语)
【问题讨论】:
我的 ASP C# 应用程序有一个带有主报表的 Crystal 报表和一个位于主报表本身内的子报表。我的主报告列出了学生,而子报告预计会列出列出的学生的分数列表。 单击按钮时,我正在填充主报告的数据表,效果很好。但是,不知道如何链接主报告和子报告。我已经定义了一个链接两个数据集的参数,但是我不知道如何在单击按钮时填充第二个数据表。 希望有一些样本,我在搜索几个小时后找不到(主要是因为我不知道要搜索的正确术语)
【问题讨论】:
通过结合这些线程,我设计了一个解决方案
我只需要在数据集中填充数据表并将子报表链接到公共列上。下面提供了示例代码。
using CrystalDecisions.CrystalReports.Engine;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace insert_demo
{
public partial class MarkList : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//DataTable dt = new DataTable();
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|insert_demo.mdf;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter(@"SELECT * from tbl_data", con);
Students ds = new Students();
da.Fill(ds, "StudentTable");
SqlDataAdapter da1 = new SqlDataAdapter(@"SELECT * from STUDENT_SCORES", con);
Students ds1 = new Students();
da1.Fill(ds1, "MarksTable");
ReportDocument oRpt = new ReportDocument();
oRpt.Load(Server.MapPath(@"~/CrystalReport4.rpt"));
oRpt.SetDataSource(ds);
oRpt.Subreports[0].DataSourceConnections.Clear();
oRpt.Subreports[0].SetDataSource(ds1);
CrystalReportViewer1.Visible = true;
CrystalReportViewer1.ReportSource = oRpt;
}
}
}
【讨论】: