日期:2014-05-20  浏览次数:20959 次

winform 水晶报表,子报表如何显示数据??
我的winform项目里,先建有一个CrystalReport1.rpt,通过在print窗体上添加一个crystalReportViewer1控件来显示报表数据,代码如下:
 int MemberId = 1;
  da = new MySqlDataAdapter("select a.MemberId as MemberId,MemberName,Score,Type from member as a left join memscore as b on a.memberid = b.memberid where a.memberid =" + MemberId + "", conn);
  da.Fill(Mydata, "MyReportDataTable");

  crystalReport11.Load(Application.StartupPath + "CrystalReport1.rpt");
  crystalReport11.SetDataSource(Mydata);
  crystalReportViewer1.ReportSource = crystalReport11;
  crystalReportViewer1.ShowPrintButton = false;
现在,我想要添加一个子报表,于是我又建了一个CrystalReport2.rpt,设计好样式之后在CrystalReport1.rpt中把CrystalReport2.rpt作为子报表添加进去,并且链接字段就是MemberId,可是怎么实现点击链接让子报表显示数据呢?
得到子报表数据的sql语句应该为:string sql="select * from assessmentinfo where MemberId=" + MemberId + "";
怎么给子报表绑定数据?

------解决方案--------------------
bdb
------解决方案--------------------
db
------解决方案--------------------
楼上上楼
------解决方案--------------------
不是很明白你的意图,只能帮顶,看楼下的怎么回答
------解决方案--------------------
问阿泰或者按照我的说法,呵呵,再做一个
------解决方案--------------------
你之前的代码,用子报表冲掉了主报表。
实际上,你的子报表加入到主报表后,就成了主报表的一部分

只要在主报表代码段上稍微修改即可

C# code
int MemberId = 1;
  da = new MySqlDataAdapter("select a.MemberId as MemberId,MemberName,Score,Type from member as a left join memscore as b on a.memberid = b.memberid where a.memberid =" + MemberId + "", conn);
  da.Fill(Mydata, "MyReportDataTable");
  //主报表部分
  crystalReport11.Load(Application.StartupPath + "CrystalReport1.rpt");
  crystalReport11.SetDataSource(Mydata);

  //假设获得子记录集 ds1
  //...
  //将记录集传递给子报表
  crystalReport11.Subreports[0].SetDataSource(ds1);

  crystalReportViewer1.ReportSource = crystalReport11;
  crystalReportViewer1.ShowPrintButton = false;

------解决方案--------------------
我顶!
------解决方案--------------------
你加个try看看到底报错是什么啊
第一次既然有结果了,第2次也应该 有,
会不会是上次的结果还在没有释放掉?难道要new一下?
------解决方案--------------------
我也用过水晶报表,子报表。但和你这个不太一样。学习下