如何使用数据集中的 2 个 sql 请求和 2 个数据表在 crystal 报告中显示数据?
How to display data in crystal report using 2 sql request and 2 datatables in dataset?
我有一个包含 2 个数据表的数据集,我需要使用 2 个 sql 请求在 crystal 报告中显示数据。所以我在我的数据集中创建了 2 个数据表(DataTable1 和 dataTable2)我尝试了这段代码,但它总是执行第二个 sql 请求!!
con.ConnectionString = @"connection";
string sql = "MyRequest1";
string sql1 = "MyRequest2";
DataSet1 ds = new DataSet1();
SqlDataAdapter dad = new SqlDataAdapter(sql, con);
SqlDataAdapter dad1 = new SqlDataAdapter(sql1, con);
dad.Fill(ds.Tables["DataTable1"]);
dad1.Fill(ds.Tables["DataTable2"]);
CrystalReport1 report = new CrystalReport1();
report.SetDataSource(ds.Tables["DataTable2"]);
report.SetDataSource(ds.Tables["DataTable1"]);
crystalReportViewer1.ReportSource = report;
crystalReportViewer1.Refresh();
您需要将数据表合并为一个并进行设置。每次使用数据表调用 SetDataSource
时,都会覆盖以前的数据。
使用Merge()
功能实现这个-
DataTable dt = ds.Tables["DataTable2"];
DataTable dt2 = ds.Tables["DataTable1"];
dt.Merge(dt2);
report.SetDataSource(dt);
解决方案是为数据集中使用的每个数据表实现一个数据表方法:第一个数据表的示例:
protected DataTable DataTable1()
{
string sql = "MyRequest";
SqlDataAdapter dad = new SqlDataAdapter(sql, con);
DataSet1 ds = new DataSet1();
dad.Fill(ds.Tables["NameOfDataTable"]);
DataTable dt = ds.Tables["NameOfDataTable"];
return dt;
}
然后在打印按钮中添加此代码:
try {
DataSet ds = new DataSet();
DataTable dt1 = DataTable1().Copy(); //the name of the method
ds.Tables.Add(dt1);
CrystalReport1 myreport = new CrystalReport1();
myreport.SetDataSource(ds);
crystalReportViewer1.ReportSource = myreport;
}
catch (Exception ex)
{
//code ...
}
成功运行:)
我有一个包含 2 个数据表的数据集,我需要使用 2 个 sql 请求在 crystal 报告中显示数据。所以我在我的数据集中创建了 2 个数据表(DataTable1 和 dataTable2)我尝试了这段代码,但它总是执行第二个 sql 请求!!
con.ConnectionString = @"connection";
string sql = "MyRequest1";
string sql1 = "MyRequest2";
DataSet1 ds = new DataSet1();
SqlDataAdapter dad = new SqlDataAdapter(sql, con);
SqlDataAdapter dad1 = new SqlDataAdapter(sql1, con);
dad.Fill(ds.Tables["DataTable1"]);
dad1.Fill(ds.Tables["DataTable2"]);
CrystalReport1 report = new CrystalReport1();
report.SetDataSource(ds.Tables["DataTable2"]);
report.SetDataSource(ds.Tables["DataTable1"]);
crystalReportViewer1.ReportSource = report;
crystalReportViewer1.Refresh();
您需要将数据表合并为一个并进行设置。每次使用数据表调用 SetDataSource
时,都会覆盖以前的数据。
使用Merge()
功能实现这个-
DataTable dt = ds.Tables["DataTable2"];
DataTable dt2 = ds.Tables["DataTable1"];
dt.Merge(dt2);
report.SetDataSource(dt);
解决方案是为数据集中使用的每个数据表实现一个数据表方法:第一个数据表的示例:
protected DataTable DataTable1()
{
string sql = "MyRequest";
SqlDataAdapter dad = new SqlDataAdapter(sql, con);
DataSet1 ds = new DataSet1();
dad.Fill(ds.Tables["NameOfDataTable"]);
DataTable dt = ds.Tables["NameOfDataTable"];
return dt;
}
然后在打印按钮中添加此代码:
try {
DataSet ds = new DataSet();
DataTable dt1 = DataTable1().Copy(); //the name of the method
ds.Tables.Add(dt1);
CrystalReport1 myreport = new CrystalReport1();
myreport.SetDataSource(ds);
crystalReportViewer1.ReportSource = myreport;
}
catch (Exception ex)
{
//code ...
}
成功运行:)