我用.net 2003自带的水晶报表来做的,主报表有两个子报表,现在我想给两个子报表分别设置不同于主报表的DataSet,我是用push方法做的,但我不太清楚该如何操作,以及怎么写代码。如果主报表和子报表的数据集相同的话,代码是下面这样写的:
SqlConnection MyConn = new SqlConnection(SQLCONNECTIONSTRING);
MyConn.Open();
string strSel = "Select * from cr_VIEW1";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
cr ds = new cr();
MyAdapter.Fill(ds,"cr_VIEW1");
ReportDoc.SetDataSource(ds);
CrystalReportViewer1.ReportSource=ReportDoc;我是用视图cr_VIEW1做的数据集。如果两个子报表都用的是别的数据集,那上面这段代码该怎么写呢?我的数据库是sql server。

解决方案 »

  1.   

        public static void SetDBLogonForSubreports(ConnectionInfo connectionInfo, ReportDocument reportDocument)
        {
            Sections sections = reportDocument.ReportDefinition.Sections;
            foreach (Section section in sections)
            {
                ReportObjects reportObjects = section.ReportObjects;
                foreach (ReportObject reportObject in reportObjects)
                {
                    if (reportObject.Kind == ReportObjectKind.SubreportObject)
                    {
                        SubreportObject subreportObject = (SubreportObject)reportObject;
                        ReportDocument subReportDocument = subreportObject.OpenSubreport(subreportObject.SubreportName);
                        SetDBLogonForReport(subReportDocument);
                    }
                }
            }
        }应该可以说明问题了吧?
      

  2.   

    SubreportObject subrpt = 主报表对象.Section4.ReportObjects["子报表对象名"] as SubreportObject;
                ReportDocument rptdoc = subrpt.OpenSubreport("子报表name");
                rptdoc.SetDataSource(dt);//填充数据集