将rpt1和rpt2合并成一个rpt,怎么样啊?
做了两个报表rpt1和rpt2,把两个表合并到一个rpt,有什么好的方法啊,这样这个报表就有2页长了。由于不能多次回复,只好重新发一个帖子了
--------------------编程问答-------------------- 不知道你这两个表具体有什么关系,还是没有任何关系? --------------------编程问答-------------------- 把一个报表做为另一个报表的子报表,就可以放在一个里了。
当然,这是第一步,还有一些后续工作 --------------------编程问答--------------------
两个表没有啥关系,一个正面,一个反面而已啦。就像两个一半的苹果一样,拼在一起就一个苹果了。
就是A4纸的正反面吧,把两个rpt连起来成一个rpt,就成了一张A2纸了。
我想不出来啊,是不是没有这种做法的? --------------------编程问答-------------------- 这个简单,主动分一下页就可以了。
以报表1为主报表,进入第1个报表的节专家,点中“报表页脚”,插入一个新的报表页脚节
点中报表页脚a,勾选“在后面新建页”
确定后返回报表1,插入子报表,选中已经存在的报表2,放在报表页脚b上即可
这样报表1和报表2连在一起,且显示在不同的页面上。 --------------------编程问答--------------------
刚刚按方法试了一下,能行,但是结果并不是我想要的。它是形成了主子报表,但是,子报表还是会把主报表中的“商品信息”重新显示一次,即实际上还是两个表。显示完成主报表后,再接着页显示子报表。
而我所预期的效果是,子报表接着主报表显示,即假如总共“商品”有5项,则主报表显示2项,子报表显示3项,并且是接着前2项而输入的。也就是说,两个表合成为一个整体了,形成无缝的连接。
不知道我有没有将这个问题解释清楚哦,呼呼~~~
或许,是不是我程序代码上也需要控制?求解,感谢阿泰一如既往的支持,非常谢谢!
附上我的代码:
DataSet myset = new DataSet();
OleDbConnection cnn = new OleDbConnection(constring);
OleDbDataAdapter myadapter = new OleDbDataAdapter();
string str = "select * from 人员信息 where ID=5";
myadapter.SelectCommand = new OleDbCommand(str, cnn);
myadapter.Fill(myset, "人员信息");
string str1 = "select * from 商品信息 where ID=5";
myadapter.SelectCommand = new OleDbCommand(str1, cnn);
myadapter.Fill(myset, "商品信息");
MyCrystal myrpt = new MyCrystal();
myrpt.SetDataSource(myset);
crystalReportViewerMy.ReportSource = myrpt;
--------------------编程问答-------------------- 你这几个帖子确实没怎么描述清楚。
按照你代码的意思,你每次直传1个ID进去,
也就是说,最后的结果,最多有两页(一页或两页)。最多5条记录
然后正面显示2条,背面显示3条?
还是不一定有多少条?不一定有多少页? --------------------编程问答--------------------
是的,多少条,多少页不确定,但是有上限,是50条。显示的时候,是正面2条,背面3条。
或许是不是我得自己写个小算法,来判断一下,有几页,然后按次序一页一页地选择来打印? --------------------编程问答--------------------
下午把代码换了换,就是想在两个报表之间交替打印。
阿泰,你帮我看看,这个代码有没有问题,因为身边没有打印机。
好像“打印”这个命令多了一点,我也不知道该怎么写。
这样一页一页地打印,行不行?打印机会不会死掉啊?
这里Pnum是商品总的项数,然后我采用一个循环来打印
//求模
Pmod = Pnum / 5;
//求余
Pyu = Pnum % 5;
for (int i = 0; i <= Pmod; i++)
{
//把很多条分为5个一组,先打印第一二项到rpt1上面
myadapter.Fill(myset, 5 * i + 0, 5 * i + 1, "商品信息");
rptDoc.Load("MyCrystal.rpt");
rptDoc.SetDataSource(myset);
//设置打印机名称
rptDoc.PrintOptions.PrinterName = System.Drawing.Printing.PrinterSettings.InstalledPrinters[1];
//设置为双面打印
rptDoc.PrintOptions.PrinterDuplex = CrystalDecisions.Shared.PrinterDuplex.Horizontal;
rptDoc.PrintToPrinter(1, true, 0, 0);
//这里是在最后的零头那边的打印
if (i == Pmod)
{
if (Pyu > 2)
{
myadapter.Fill(myset, 5 * i + 2, 5 * i + Pyu, "商品信息");
rptDoc.Load("MyCrystal2.rpt");
rptDoc.SetDataSource(myset);
//设置打印机名称
rptDoc.PrintOptions.PrinterName = System.Drawing.Printing.PrinterSettings.InstalledPrinters[1];
//设置为双面打印
rptDoc.PrintOptions.PrinterDuplex = CrystalDecisions.Shared.PrinterDuplex.Horizontal;
rptDoc.PrintToPrinter(1, true, 0, 0);
}
}
//这边是打印第 3,4,5项商品,就打印在反面的。
myadapter.Fill(myset, 5 * i + 2, 5 * i + 4, "人员信息");
rptDoc.Load("MyCrystal2.rpt");
rptDoc.SetDataSource(myset);
//设置打印机名称
rptDoc.PrintOptions.PrinterName = System.Drawing.Printing.PrinterSettings.InstalledPrinters[1];
//设置为双面打印
rptDoc.PrintOptions.PrinterDuplex = CrystalDecisions.Shared.PrinterDuplex.Horizontal;
rptDoc.PrintToPrinter(1, true, 0, 0); --------------------编程问答-------------------- 第三个“人员信息”,弄错了,应该为“商品信息”
补充:.NET技术 , 图表区