水晶报表子报表绑定数据源的问题。。。

jazzbond 2011-08-25 07:57:14

string sql=string.Format("SELECT zax03, zax04,zax05, zax06, zax07, zax09,"+
"zax10,zax12, zax13, zax14, zax15, zax16,"+
"zax17, zax18, zax19, zax20, zax21,zax22,"+
"zax23, zax24, zax25, zax26 FROM zax_file);

这句sql返回一行数据, zax09 至 zax26 是报表的查询SQL,zax09是主报表的SQL,这一句我绑定到数据源了,但是从 zax10到 zax26 我不知道如何一一对应上子报表,这 里 之 所 以 有 10几个子报表的SQL是因为有些是空的,

比如 a主表有6个子报表 那么10几个中就有几个是空没有SQL语句。


//主报表绑定了
string l_MainReportSql =zax09;
oda = new OracleDataAdapter(l_MainReportSql, ocnn);
DataSet ds = new DataSet();
oda.Fill(ds);
CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables[0]);
CrystalReportViewer1.ReportSource = CrystalReportSource1;
CrystalReportSource1.DataBind();


//这段是扫出报表里面的子报表
ReportDocument subRepDoc = new ReportDocument();
Sections crSections;
ReportObjects crReportObjects;
SubreportObject crSubreportObject;

crSections = CrystalReportSource1.ReportDocument.ReportDefinition.Sections;
foreach (Section crSection in crSections)
{
crReportObjects = crSection.ReportObjects;
foreach (ReportObject crReportObject in crReportObjects)
{
if (crReportObject.Kind == ReportObjectKind.SubreportObject)
{
crSubreportObject = (SubreportObject)crReportObject;
subRepDoc = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName);
//这里要如何付给他数据源呢?
subRepDoc.SetDataSource(ds.Tables[0]);

}

}

}




假设在里面得到了一个子报表后,我就 string sql=zax10;不过我都还不是到zax10是不是他的数据源
...全文
341 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolililaile 2011-08-26
  • 打赏
  • 举报
回复
加载主报表能成功,可是加载主报表的子报表出现了要输入参数???看了一下子报表没有参数啊,而页面要我输入的是主报表和子报表之间关联的列的参数。。。。。 为什么
wolililaile 2011-08-26
  • 打赏
  • 举报
回复
加载主报表能成功,可是加载主报表的子报表出现了要输入参数???看了一下子报表没有参数啊,而页面要我输入的是主报表和子报表之间关联的列的参数。。。。。 为什么
jazzbond 2011-08-25
  • 打赏
  • 举报
回复
我想问的是 就是我把子报表的语句都执行放到dataset 最后绑定就绑定一个dataset,他就会自动帮我绑定上去。。。。 有这种可能性吗?
jazzbond 2011-08-25
  • 打赏
  • 举报
回复
就像

//这里开始做第一个子报表
string l_SubReportSql =zax10;
oda = new OracleDataAdapter(l_SubReportSql, ocnn);
DataSet ds = new DataSet();
oda.Fill(ds);
CrystalReportSource1.ReportDocument.SubReports["子报表名称1"].SetDataSource(ds.Tables[0]);
//我就是不知道子报表名称1和zax10之间的关系怎么关联的
jazzbond 2011-08-25
  • 打赏
  • 举报
回复
阿泰哥 我知道可以这样去绑定 可是我不知道子报表名称和哪一个zax的SQL语句对应啊,之所以会有

zax09
"zax10,zax12, zax13, zax14, zax15, zax16,"+
"zax17, zax18, zax19, zax20, zax21,zax22,"+
"zax23, zax24, zax25, zax26 where =‘主报表的id’

zax10-zax26 总共16个子报表语句,有几百个主报表,他们的子报表个数个不相同所有16个有的全有SQL
有的可能只有8个有SQL语句的,但是同用这条
zax09
"zax10,zax12, zax13, zax14, zax15, zax16,"+
"zax17, zax18, zax19, zax20, zax21,zax22,"+
"zax23, zax24, zax25, zax26 where =‘主报表的id’

SQL语句,只是ID不同,所有我想说绑定的原理在哪里
阿泰 2011-08-25
  • 打赏
  • 举报
回复
这样试试,可以先只试出一个来先,不用全写完。

OK 基本了解。就是取出SQL,然后用SQL再取出记录集。

//主报表绑定了
string l_MainReportSql =zax09;
oda = new OracleDataAdapter(l_MainReportSql, ocnn);
DataSet ds = new DataSet();
oda.Fill(ds);
CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables[0]);
//这里开始做第一个子报表
string l_SubReportSql =zax10;
oda = new OracleDataAdapter(l_SubReportSql, ocnn);
DataSet ds = new DataSet();
oda.Fill(ds);
CrystalReportSource1.ReportDocument.SubReports["子报表名称1"].SetDataSource(ds.Tables[0]);

//同理第2个子报表
l_SubReportSql =zax11;
oda = new OracleDataAdapter(l_SubReportSql, ocnn);
DataSet ds = new DataSet();
oda.Fill(ds);
CrystalReportSource1.ReportDocument.SubReports["子报表名称2"].SetDataSource(ds.Tables[0]);
//...

CrystalReportViewer1.ReportSource = CrystalReportSource1;
CrystalReportSource1.DataBind();

//后面的都不要了


当然,其实代码也可以写在后面的里面,就是也要写对应关系,还不如一个一个写的直观吧,看个人习惯了
jazzbond 2011-08-25
  • 打赏
  • 举报
回复
啊泰哥 能否指点一二
jazzbond 2011-08-25
  • 打赏
  • 举报
回复
我从数据库 取出的列是这样的
zax09
"zax10,zax12, zax13, zax14, zax15, zax16,"+
"zax17, zax18, zax19, zax20, zax21,zax22,"+
"zax23, zax24, zax25, zax26

每个列都是一条SQL语句

zax09是主报表的的SQL语句

那我在循环的时候得到了子报表了,可是他要用哪一列的语句我就蒙了~~~

foreach (ReportObject crReportObject in crReportObjects)
{
if (crReportObject.Kind == ReportObjectKind.SubreportObject)
{
crSubreportObject = (SubreportObject)crReportObject;
subRepDoc = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName);
//这里要如何付给他数据源呢?
subRepDoc.SetDataSource(ds.Tables[0]);

}

}
阿泰 2011-08-25
  • 打赏
  • 举报
回复
你的子报表的数据源xsd是怎么设计的,就一个只有一个字段的表?
如果你的数据都是从那一句SQL里出来的,那么完全可以用主报表的那个xsd里的datatable,没必要单独建一个。
jazzbond 2011-08-25
  • 打赏
  • 举报
回复
跪求高手指点!

4,819

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧