简体   繁体   中英

How to set datasource of Sub crystal report in c# win form app

I am using this code to load a main report and a subreport inside the main report. The main report is a blank one and just contains subreport.

Here is my code:

MySqlConnection cnn;
string connectionString = null;
string sql = null;

connectionString = "Server = BC; Database = mydb1; Uid = root; Pwd = abc123;";
cnn = new MySqlConnection(connectionString);
cnn.Open();

sql = "SELECT * from mytable1 ";
MySqlDataAdapter dscmd = new MySqlDataAdapter(sql, cnn);
DataSet1 ds = new DataSet1();
dscmd.Fill(ds, "Imagetest");
cnn.Close();

ReportDocument cryRpt = new ReportDocument();
cryRpt.Load("C:/Subreport.rpt");
cryRpt.SetDataSource(ds.Tables[1]);

crystalReportViewer1.ReportSource = "C:/MainReport.rpt";
crystalReportViewer1.Refresh();

When I run the application I just see main report with blank subreport.

ReportDocument cryRpt = new ReportDocument();
cryRpt.Load("C:/MainReport.rpt");
cryRpt.DataSourceConnections.Clear();
cryRpt.SetDataSource(ds.Tables[0]);
cryRpt.Subreports[0].DataSourceConnections.Clear();
cryRpt.Subreports[0].SetDataSource(ds.Tables[0]);
crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh();

Simply do this:

...
DataSet ds = new DataSet();
dscmd.Fill(ds, "DataTable1");
...

ReportDocument cryRpt = new ReportDocument();
cryRpt.Load("C:/MainReport.rpt");
cryRpt.SetDataSource(ds);

crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh();

Note I'm creating a new DataSet and not a type derived from the DataSet.

In the report/subreport database fields menu, the table must have the same name as the DataTable:

数据库字段菜单中的表必须与数据表具有相同的名称

And the Datasource location for reports and subreports must be the same: 主报告的数据源位置

连接报告和子报告的路径相同

This will bind the source tables by name with the .rpt file. Doing in this way you no longer need to set the data for each subreport by code.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM