从TX Text Control .NET Server 16.0开始,通过MailMerge类可以实现级联数据的合并操作,TX文档将级联模块组织成一种递归的树形结构,并通过关系数据对TX文档中的合并域进行数据合并。
我们就以生成所有员工的病假时间和休假时间报表为例,来讲解级联数据报表的实现方法。我们创建的文档模板中包含固定信息、每个员工的动态信息以及每个员工相关的病假和休假时间信息。 1、固定信息:标题Accruals Report、页号Page n 2、动态信息:公司名称Softerware Consultants,LLC、日期Date 3、每个员工的基本信息:员工编号Employee number、员工名字Employee name 4、每个员工的请假信息:Date、Type、Action、Note、Hours、Balance 通过上面的各种信息创建出下面所示的文档模板: 模板中重复显示的区域用一对起始和结束符进行标记,下面的图片展示了TX Template Designer 中的一个重复显示区域: 使用TX Test Control .NET Server 版本中的MailMerge组件,会让数据合并过程变得非常容易,你不必遍历所有的标记文本域,也不必关心重复显示区域。整个合并过程(包括级联区域的合并)都是自动完成的,下面的代码是在使用MailMerge组件时需要进行的一些设置: mailMerge1.LoadTemplateFromMemory(data, TXTextControl.DocumentServer.FileFormat.InternalUnicodeFormat); // load the XML file DataSet ds = new DataSet(); ds.ReadXml(tbDatabaseFile.Tag.ToString(), XmlReadMode.Auto); // add the relations for the nested blocks DataRelation relation_sick = new DataRelation("sick", ds.Tables["employee"].Columns["dyn_employee_number"], ds.Tables["sick"].Columns["dyn_employee_number"]); DataRelation relation_vacation = new DataRelation("vacation", ds.Tables["employee"].Columns["dyn_employee_number"], ds.Tables["vacation"].Columns["dyn_employee_number"]); ds.Relations.Add(relation_vacation); ds.Relations.Add(relation_sick); // pass the data mailMerge1.MergeBlocks(ds); mailMerge1.Merge(ds.Tables["general"], true); 复制代码我们使用的数据源包含下面4个数据表,其中绿色标记的列是数据源中用于建立表之间关系的列,MailMerge类会自动解析这种树形结构,并正确的合并到相应的标记文本域中: 操作步骤: 1、点击Report菜单中的Load XML...,选择data.xml作为用于合并的数据源 2、点击Template菜单中的Load...,打开Accruals Report.docx文件 3、点击Create Report按钮,程序开始实现数据合并功能 4、合并之后的文档可以导出为doc、docx、PDF等格式
|
|
|
关于葡萄城
赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。
了解详情,请访问葡萄城官网。