如何在c#win form app中设置Sub crystal report的数据源

时间:2011-11-04 07:48:40

标签: c# crystal-reports

我正在使用此代码在主报表中加载主报表和子报表。主报告是空白报告,只包含子报告。

这是我的代码:

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();

当我运行应用程序时,我只看到带有空白子报告的主报告。

2 个答案:

答案 0 :(得分:11)

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();

答案 1 :(得分:0)

只需执行以下操作:

...
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();

请注意,我正在创建一个新的数据集,而不是从该数据集派生的类型。

在“报告/子报告数据库”字段菜单中,表的名称必须与DataTable的名称相同:

Table in Database Fields menu must have the same name as the DataTable

并且报表和子报表的数据源位置必须相同: Datasource location for main report

Path for connection report and subreport are the same

这将按名称将源表与.rpt文件绑定。 这样,您不再需要通过代码为每个子报表设置数据。

相关问题