请问如何设置子报表的数据源?当前已经可以显示出主报表,我的主报表设置如下:
string sql = "SELECT * FROM Table";
string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("~/App_Data/test.mdb");
DataSet ds = new DataSet();
OleDbConnection Con = new OleDbConnection(ConString);
OleDbCommand Cmd = new OleDbCommand(sql, Con);
OleDbDataAdapter Ad = new OleDbDataAdapter();
Ad.SelectCommand = Cmd;
Ad.Fill(ds, "sql");
CrystalReportSource1.ReportDocument.Load(Server.MapPath("~/Reports/report.rpt"));
CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables["sql"]);
CrystalReportViewer1.ReportSource = CrystalReportSource1;
string sql = "SELECT * FROM Table";
string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("~/App_Data/test.mdb");
DataSet ds = new DataSet();
OleDbConnection Con = new OleDbConnection(ConString);
OleDbCommand Cmd = new OleDbCommand(sql, Con);
OleDbDataAdapter Ad = new OleDbDataAdapter();
Ad.SelectCommand = Cmd;
Ad.Fill(ds, "sql");
CrystalReportSource1.ReportDocument.Load(Server.MapPath("~/Reports/report.rpt"));
CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables["sql"]);
CrystalReportViewer1.ReportSource = CrystalReportSource1;
{
OleDbConnection myconnect=new OleDbConnection(ConfigurationSettings.AppSettings[ "connstr "]);
string sqlstr1= " SELECT PLACE_ORDER_DETAIL.PLACE_ORDER_NO,PLACE_ORDER_DETAIL.PRODCODE,PLACE_ORDER_DETAIL.PRO_NAME,PLACE_ORDER_DETAIL.PRO_SPEC,PLACE_ORDER_DETAIL.COLOR,PLACE_ORDER_DETAIL.UNIT,PLACE_ORDER_DETAIL.ORDER_QTY FROM PLACE_ORDER_DETAIL WHERE PLACE_ORDER_DETAIL.PLACE_ORDER_NO = '04-110 ' ";
OleDbDataAdapter myadapter=new OleDbDataAdapter(sqlstr1,myconnect);
DataSet mydataset=new DataSet();
myadapter.Fill(mydataset, "first ");
cr_cljdrx oRpt=new cr_cljdrx();//主报表 空白 无数据
cljdrx oRpt1=new cljdrx1();//子报表 ,只把它插入到了主报表中
oRpt1.SetDataSource(mydataset.Tables[ "first "]); //绑定子报表数据
CrystalReportViewer1.ReportSource=oRpt;//显示报表
// 在此处放置用户代码以初始化页面
}
CrystalDecisions.CrystalReports.Engine.ReportDocument rpt=new CrystalDecisions.CrystalReports.Engine.ReportDocument();
rpt.SetDataSource( "报表数据源 ");
rpt.OpenSubreport( "子报表名称 ").SetDataSource( "子报表数据源 ");
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;namespace CS_Win_RDObjMod_DBLogonSubrpt
{
public partial class Form1 : Form
{
private ReportDocument northwindCustomersReport; public Form1()
{
InitializeComponent();
} private void ConfigureCrystalReports()
{
northwindCustomersReport = new ReportDocument();
string reportPath = Application.StartupPath + "\\" + "NorthwindCustomers.rpt";
northwindCustomersReport.Load(reportPath); ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = "ENXP-50701E";
connectionInfo.DatabaseName = "Northwind";
connectionInfo.IntegratedSecurity = true;
SetDBLogonForReport(connectionInfo, northwindCustomersReport); SetDBLogonForSubreports(connectionInfo, northwindCustomersReport); crystalReportViewer.ReportSource = northwindCustomersReport;
} private void Form1_Load(object sender, EventArgs e)
{
ConfigureCrystalReports();
} private void crystalReportViewer_Load(object sender, EventArgs e)
{ } private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
{
Tables tables = reportDocument.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogonInfo); } } private 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(connectionInfo, subReportDocument); }
} } }
}
}
{
UsersReport = new ReportDocument();
string reportPath = Server.MapPath("~/Reports/Report.rpt");
UsersReport.Load(reportPath);
DataSet dataSet = new DataSet();
OleDbConnection cn = new OleDbConnection(ConString); OleDbDataAdapter da = new OleDbDataAdapter("SELECT Name,Users,Country,COUNT(*) as total FROM (select distinct Name,T_Name,Country,Users from tblList) group by Name,Country,Users", cn);
da.Fill(dataSet, "List"); OleDbDataAdapter da2 = new OleDbDataAdapter("SELECT Name,Country,COUNT(*) as total FROM (select distinct Name,T_Name,Country from tblList) group by Name,Country", cn);
da2.Fill(dataSet, "tblList"); UsersReport.OpenSubreport("SubReport.rpt").SetDataSource(dataSet.Tables["tblList"]); UsersReport.SetDataSource(dataSet.Tables["List"]);
CrystalReportViewer1.ReportSource = UsersReport;
CrystalReportViewer1.DataBind();
}
OleDbDataAdapter da2 = new OleDbDataAdapter(子报表SQL, cn);
da2.Fill(dataSet, "子报表用的表名");即可达到效果另外你上面的语句,可能应该是这样, 是子报表名,而不是子报表文件名
UsersReport.OpenSubreport("SubReport").SetDataSource(dataSet.Tables["tblList"]);
OleDbDataAdapter da2 = new OleDbDataAdapter(子报表SQL, cn);
da2.Fill(dataSet, "子报表用的表名"); 是不是就去掉该句UsersReport.OpenSubreport("SubReport.rpt").SetDataSource(dataSet.Tables["tblList"]); 但是去掉它后仍然不能显示另一个子报表?你说的那样把da2填充进去,是不是就显示在一个主报表里面了?