找回密码
 立即注册

QQ登录

只需一步,快速开始

Bella.Yuan Wyn认证
超级版主   /  发表于:2024-10-18 14:00  /   查看:53  /  回复:0
本帖最后由 Bella.Yuan 于 2024-10-18 14:21 编辑

17版本上针对报表类型新增了rdl交互式报表和rdl多区域报表,所以目前rdl报表类型有三个:rdl报表/rdl交互式报表/rdl多区域报表,18版本上rdl报表进行了合并,所以目前rdl报表有两个:rdl交互式报表和rdl多区域报表,那针对这2个报表和之前的rdl报表结构不一样,所以如果要使用代码给组件赋值,之前的代码会不生效,需要修改代码。
17版本之前参考这个教程
winform如何使用代码给对应的组件进行赋值
https://gcdn.grapecity.com.cn/showtopic-168084-1-1.html
(出处: 葡萄城开发者社区)

17版本之后(包含17版本),参考这篇教程
这里不多赘述,主要说明不同之处:
先使用任意的IDE打开报表文件(这里主要不要使用ActiveReports桌面设计器打开),因为这里主要是想看报表的结构

上图左边是18版本(17/18 版本),右边是16版本,很明显,从上图可以看到报表结构不同。

接下来,话不多说,直接上代码:

//加载报表
            System.IO.FileInfo rptPath = new System.IO.FileInfo(@"AR1.rdlx");
            GrapeCity.ActiveReports.PageReport report = new GrapeCity.ActiveReports.PageReport(rptPath);

            //17版本之前:rdl报表 or 页面报表
            //修改文本框的值
            //GrapeCity.ActiveReports.PageReportModel.ReportItem items = report.Report.Body.ReportItems["text1"];
            //17版本及之后的版本://rdl交互式报表/rdl多区域报表
            //修改文本框的值
            GrapeCity.ActiveReports.PageReportModel.ReportItem item = report.Report.ReportSections[0].Body.ReportItems["text1"];
            GrapeCity.ActiveReports.PageReportModel.TextBox text1 = new GrapeCity.ActiveReports.PageReportModel.TextBox();
            text1 = (GrapeCity.ActiveReports.PageReportModel.TextBox)item;
            text1.Value = "kkkkkkkkkkk";

            //修改图片的值:这里需要注意如果使用的是内嵌图片,此时如果要修改图片的值,必须先把其他图片放到报表文件中,也就是使用桌面设计器打开该报表文件,
            //将对应的图片上传到内嵌图片,然后在代码中在进行使用
            GrapeCity.ActiveReports.PageReportModel.ReportItem iteImgExternal = report.Report.ReportSections[0].Body.ReportItems["图像2"];
            GrapeCity.ActiveReports.PageReportModel.Image imgExternal = new GrapeCity.ActiveReports.PageReportModel.Image();
            imgExternal = (GrapeCity.ActiveReports.PageReportModel.Image)iteImgExternal;
            imgExternal.Value = "https://www.jiujigong.com/uploads/image/20200728/1595925436.jpg";

            //内嵌
            GrapeCity.ActiveReports.PageReportModel.ReportItem iteImgEmbedded = report.Report.ReportSections[0].Body.ReportItems["图像1"];
            GrapeCity.ActiveReports.PageReportModel.Image imgEmbedded = new GrapeCity.ActiveReports.PageReportModel.Image();
            imgEmbedded = (GrapeCity.ActiveReports.PageReportModel.Image)iteImgEmbedded;
            imgEmbedded.Value = "b";//b.jpg在报表文件中已存在

            //外部链接修改成内嵌
            GrapeCity.ActiveReports.PageReportModel.ReportItem iteImg = report.Report.ReportSections[0].Body.ReportItems["图像3"];
            GrapeCity.ActiveReports.PageReportModel.Image img = new GrapeCity.ActiveReports.PageReportModel.Image();
            img = (GrapeCity.ActiveReports.PageReportModel.Image)iteImg;
            img.Source = GrapeCity.ActiveReports.PageReportModel.ImageSource.Embedded;//修改图片来源
            img.Value = "b";//b.jpg在报表文件中已存在

            //17版本之前使用下面的代码
            //GrapeCity.ActiveReports.PageReportModel.ReportItem item = report.Report.Body.ReportItems["表格1"];
            //17版本及之后的版本使用下面的代码
            GrapeCity.ActiveReports.PageReportModel.ReportItem itemTable = report.Report.ReportSections[0].Body.ReportItems["表格1"];
            
            GrapeCity.ActiveReports.PageReportModel.TextBox textHeader = new GrapeCity.ActiveReports.PageReportModel.TextBox();
            GrapeCity.ActiveReports.PageReportModel.TextBox textDetail = new GrapeCity.ActiveReports.PageReportModel.TextBox();
            GrapeCity.ActiveReports.PageReportModel.TextBox textFooter = new GrapeCity.ActiveReports.PageReportModel.TextBox();
            GrapeCity.ActiveReports.PageReportModel.Table table = new GrapeCity.ActiveReports.PageReportModel.Table();

            table = (GrapeCity.ActiveReports.PageReportModel.Table)itemTable;

            var sHeader = table.Header.TableRows[0].TableCells[0].ReportItems[0];//Header是报表头
            textHeader = (GrapeCity.ActiveReports.PageReportModel.TextBox)sHeader;
            textHeader.Value = "aaaaaaaa";

            var sDetails = table.Details.TableRows[0].TableCells[3].ReportItems[0];//Details是明细行
            textDetail = (GrapeCity.ActiveReports.PageReportModel.TextBox)sDetails;
            //textDetail.Value = "=Fields!地区.Value";
            textDetail.Value = "bbbbbbbb";

            var sFooter = table.Footer.TableRows[0].TableCells[0].ReportItems[0];//Footer是报表尾
            textFooter = (GrapeCity.ActiveReports.PageReportModel.TextBox)sFooter;
            textFooter.Value = "cccccccc";

            this.viewer1.LoadDocument(report.Document);

这里需要注意图片组件,如果图片是内嵌图片,修改其他图片时,对应的图片也应该在报表文件中,因为内嵌的图片资源是放在报表文件中的,此时记得先将修改后的图片先放进报表文件,复制图片放入内嵌资源即可在代码中进行使用。

附件是18版本的demo,大家可以下载进行对应的修改和使用。






本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 立即注册
返回顶部