【问题标题】:How to set datasource of Sub crystal report in c# win form app如何在c#win form app中设置子水晶报表的数据源
【发布时间】:2011-11-04 07:48:40
【问题描述】:

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

这是我的代码:

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

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

【问题讨论】:

    标签: c# crystal-reports


    【解决方案1】:
    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();
    

    【讨论】:

      【解决方案2】:

      只需这样做:

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

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

      在报表/子报表数据库字段菜单中,表必须与DataTable同名:

      报表和子报表的数据源位置必须相同:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多