找回密码
 立即注册

QQ登录

只需一步,快速开始

losthero

注册会员

4

主题

9

帖子

47

积分

注册会员

积分
47
losthero
注册会员   /  发表于:2018-4-10 09:35  /   查看:3775  /  回复:7
1、我现在有这样一个需求,winform程序中,在报表Viewer加载完后调用它的完成事件设置打印机,打印报表,报表是页面报表,每次只会生成一页报表,现在要打印此页报表两次,每次更改报表的标题内容,请问这样的需求如何实现?
2、我现在想到的办法是增加一个报表参数,循环调用打印机实现打印两次,每次调用打印前通过PageReport对象来更改报表参数,但是发现这边在报表文档加载完成后更改参数值不会生效,是需要重新加载报表文档还是要怎么样做,求助各位老师帮忙看看有什么解决方案?如果不用报表参数这种方式,有其他什么办法么?
3、代码

       ///成员属性
        private PageReport pageReport;
        private GrapeCity.ActiveReports.Viewer.Win.Viewer viewer1;
        private List<Object> dtos = new List<Object>();

        ///初始化报表
        private void InitializeReport()
        {
            pageReport = new PageReport(new FileInfo(Path.Combine(Application.StartupPath, @"..\..\Report\LoadVoucher\pageReport1.rdlx")));
            GrapeCity.ActiveReports.Document.PageDocument pageDocument = new GrapeCity.ActiveReports.Document.PageDocument(pageReport);
            viewer1.LoadDocument(pageDocument);
        }

        //打印报表
        private void Viewer1_LoadCompleted(object sender, EventArgs e)
        {

            pageReport.Document.Printer.PrinterName = @"HP LaserJet P1008";
            for (int i = 0; i < 2; i++)
            {
                if (i == 0)
                {
                    pageReport.Report.ReportParameters[0].DefaultValue.Values.Add("第一联提货凭证");
                }
                else
                {
                    pageReport.Report.ReportParameters[0].DefaultValue.Values.Add("第二联结算凭证");
                }
                pageReport.Document.Printer.Landscape = true;
                pageReport.Run();
                pageReport.Document.Print(false, false, false);
            }
        }

      ///报表绑定数据源
        private void viewer1_LocateDataSource(object sender, LocateDataSourceEventArgs args)
        {
            args.Data = this.dtos;
        }


7 个回复

倒序浏览
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-4-10 10:40:23
沙发
您好!
我咨询下,您报表每次修改的报表的标题是任意的修改,还是都是有一个固定的模式,比如说公司名+固定的文字形式

如果是这样,您可以通过参数报表实现,标题头是参数加固定文字的形式。
具体办法是:
1、您给报表添加一个参数,然后参数就是变化值,可以是您添加的固定值,或者是您在表里查询出来的值。
2、把参数值给绑定到标题上,您选择对应的参数然后显示报表,标题就会对应的发生变化。
下面是一个在模板库中,可参考的模板,模板库的下载地址:http://www.gcpowertools.com.cn/products/redirect.aspx?r=77


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
losthero
注册会员   /  发表于:2018-4-10 10:48:08
板凳
KearneyKang 发表于 2018-4-10 10:40
您好!
我咨询下,您报表每次修改的报表的标题是任意的修改,还是都是有一个固定的模式,比如说公司名+固 ...

是任意值,一页报表要循环打印,打印的时候更改报表标题
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-4-10 14:11:39
地板

你好,修改你说的表头问题,只有目前这种参数报表的传参的办法。
你说的参数改变不了,你在打印的时候需要重新加载一次报表,不然打印的就是第一次预览时的参数值。报表加载的方法,重新加载后再执行打印。
  1. GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath(@"测试12.rdlx")));
  2.             rpt.Report.ReportParameters[0].DefaultValue.Values.Add("hgh");
  3.             this.WebViewer1.Report = rpt;
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
losthero
注册会员   /  发表于:2018-4-10 14:53:58
5#
KearneyKang 发表于 2018-4-10 14:11
你好,修改你说的表头问题,只有目前这种参数报表的传参的办法。
你说的参数改变不了,你在打印的时候需 ...

报表浏览控件用的不是webViewer控件,用的Viewer控件,Viewer的重新加载报表代码该怎么写呢?
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-4-10 18:16:15
6#
您参考我们在线视频:http://www.gcpowertools.com.cn/p ... orts_learnvideo.htm
里面有对应的教学视频
回复 使用道具 举报
losthero
注册会员   /  发表于:2018-4-11 09:16:05
7#
KearneyKang 发表于 2018-4-10 18:16
您参考我们在线视频:http://www.gcpowertools.com.cn/products/activereports_learnvideo.htm
里面有对应 ...

这里的视频我看了很多遍了,关于winform程序中绑定报表的代码,有用的也就下边这个
            pageReport = new PageReport(new FileInfo(Path.Combine(Application.StartupPath, @"Report\pageReport1.rdlx")));
            GrapeCity.ActiveReports.Document.PageDocument pageDocument = new GrapeCity.ActiveReports.Document.PageDocument(pageReport);
            viewer1.LoadDocument(pageDocument);
你有没有仔细看我最初在帖子里上传的代码,我这个是在报表浏览控件加载完成后在回调事件里调用的打印程序,也就是这个事件Viewer1_LoadCompleted,如果继续使用上边的代码,改变报表参数的值,然后重新加载报表,就会一直调用回调事件,形成死循环,一直在调用打印程序。你帮忙看看,重新加载报表是不是只能是上边那样的代码,还是有其他的怎么写,或者我应该在什么时候调用打印代码?谢谢!
回复 使用道具 举报
KearneyKang讲师达人认证 悬赏达人认证
超级版主   /  发表于:2018-4-11 09:42:39
8#
你好!
这是一个在Winform情况下如何添加导出按钮的博客。但是添加打印按钮跟添加导出操作一样,您自己写一个打印的触发事件,然后通过触发打印。
博客地址:http://blog.gcpowertools.com.cn/post/WinForm-Export.aspx

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部