当前位置:编程学习 > C#/ASP.NET >>

将rpt1和rpt2合并成一个rpt,怎么样啊?

做了两个报表rpt1和rpt2,把两个表合并到一个rpt,有什么好的方法啊,这样这个报表就有2页长了。
由于不能多次回复,只好重新发一个帖子了
--------------------编程问答-------------------- 不知道你这两个表具体有什么关系,还是没有任何关系? --------------------编程问答-------------------- 把一个报表做为另一个报表的子报表,就可以放在一个里了。
当然,这是第一步,还有一些后续工作 --------------------编程问答--------------------
引用 1 楼 luols 的回复:
不知道你这两个表具体有什么关系,还是没有任何关系?

两个表没有啥关系,一个正面,一个反面而已啦。就像两个一半的苹果一样,拼在一起就一个苹果了。

就是A4纸的正反面吧,把两个rpt连起来成一个rpt,就成了一张A2纸了。

我想不出来啊,是不是没有这种做法的? --------------------编程问答-------------------- 这个简单,主动分一下页就可以了。

以报表1为主报表,进入第1个报表的节专家,点中“报表页脚”,插入一个新的报表页脚节
点中报表页脚a,勾选“在后面新建页”
确定后返回报表1,插入子报表,选中已经存在的报表2,放在报表页脚b上即可

这样报表1和报表2连在一起,且显示在不同的页面上。 --------------------编程问答--------------------
引用 4 楼 babyt 的回复:
这个简单,主动分一下页就可以了。


刚刚按方法试了一下,能行,但是结果并不是我想要的。它是形成了主子报表,但是,子报表还是会把主报表中的“商品信息”重新显示一次,即实际上还是两个表。显示完成主报表后,再接着页显示子报表。
而我所预期的效果是,子报表接着主报表显示,即假如总共“商品”有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条?

还是不一定有多少条?不一定有多少页? --------------------编程问答--------------------
引用 6 楼 babyt 的回复:
你这几个帖子确实没怎么描述清楚。
按照你代码的意思,你每次直传1个ID进去,

也就是说,最后的结果,最多有两页(一页或两页)。最多5条记录
然后正面显示2条,背面显示3条?

还是不一定有多少条?不一定有多少页?


是的,多少条,多少页不确定,但是有上限,是50条。显示的时候,是正面2条,背面3条。

或许是不是我得自己写个小算法,来判断一下,有几页,然后按次序一页一页地选择来打印? --------------------编程问答--------------------
引用 6 楼 babyt 的回复:
。。。。


下午把代码换了换,就是想在两个报表之间交替打印。

阿泰,你帮我看看,这个代码有没有问题,因为身边没有打印机。

好像“打印”这个命令多了一点,我也不知道该怎么写。

这样一页一页地打印,行不行?打印机会不会死掉啊?

这里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技术 ,  图表区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,