我正在使用此代码在主报表中加载主报表和子报表。主报告是空白报告,只包含子报告。
这是我的代码:
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();
当我运行应用程序时,我只看到带有空白子报告的主报告。
答案 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的名称相同:
这将按名称将源表与.rpt文件绑定。 这样,您不再需要通过代码为每个子报表设置数据。