winform如何使用代码给对应的组件赋值II
本帖最后由 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.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.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.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.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.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.TableCells.ReportItems;//Header是报表头
textHeader = (GrapeCity.ActiveReports.PageReportModel.TextBox)sHeader;
textHeader.Value = "aaaaaaaa";
var sDetails = table.Details.TableRows.TableCells.ReportItems;//Details是明细行
textDetail = (GrapeCity.ActiveReports.PageReportModel.TextBox)sDetails;
//textDetail.Value = "=Fields!地区.Value";
textDetail.Value = "bbbbbbbb";
var sFooter = table.Footer.TableRows.TableCells.ReportItems;//Footer是报表尾
textFooter = (GrapeCity.ActiveReports.PageReportModel.TextBox)sFooter;
textFooter.Value = "cccccccc";
this.viewer1.LoadDocument(report.Document);
这里需要注意图片组件,如果图片是内嵌图片,修改其他图片时,对应的图片也应该在报表文件中,因为内嵌的图片资源是放在报表文件中的,此时记得先将修改后的图片先放进报表文件,复制图片放入内嵌资源即可在代码中进行使用。
附件是18版本的demo,大家可以下载进行对应的修改和使用。
页:
[1]