提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:杨鹏连|2021-02-20 10:24:42.417|阅读 253 次
概述:该ReportEditor控件可用于创建、打开、保存、预览和打印MindFusion.Reporting报表。它可以集成在任何WinForms应用程序中,并为其提供编辑报表的能力。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
MindFusion.Reporting for WinForms是一个原生的Windows Forms编程组件,它为任何.NET应用程序提供专业的报表功能。该组件完全使用C#语言编写,易于使用和集成。它提供您创建一个完美报表所需要的一切。MindFusion.Reporting for WinForms现已加入在线订购,Standard Single Developer版本原价2848现在抢购立享优惠只需2345,立即查看详情>>
点击下载MindFusion.Reporting for WinForms最新试用版
该ReportEditor控件可用于创建、打开、保存、预览和打印MindFusion.Reporting报表。它可以集成在任何WinForms应用程序中,并为其提供编辑报表的能力。这对于全规模的报表应用程序以及较小的应用程序来说是非常有用的,它可以让最终用户在可视化的环境中修改现有的报表。例如,托管ReportEditor控件的应用程序可用于允许最终用户根据其需求调整预先存在的报表模板。
注释说明
ReportEditor类位于MindFusion.Reporting.Editor.dll集合中。
注意事项
使用报表编辑器的应用程序的最低要求 "目标框架 "是".NET框架4"。
编辑器组件
该编辑器由四个主要组件组成--设计器区域、属性网格、工具箱和预览面板。下图展示了ReportEditor控件的默认外观。
使用编辑器
用户体验
由于ReportEditor控件是基于在Visual Studio中实现MindFusion.Reporting报表设计时支持的相同组件和服务,因此从用户的角度来看,使用ReportEditor控件创建报表和在Visual Studio中创建报表几乎是相同的。要了解如何交互式设计报表的基础知识,请查看报表设计器主题。创建、打开和保存报表
编辑器内显示的报表实例可以通过报表属性进行访问。注意,这个属性是只读的。正因为如此,要打开一个现有的报表进行编辑,首先要使用它的SaveToXml方法保存报表,然后通过OpenReport方法在编辑器里面打开报表。直接通过调用Report本身的LoadFromXml打开报表是不可取的。更为一般的是,以任何方式对编辑后的报表进行程序修改都需要谨慎。请查看本主题末尾的 "以编程方式修改已编辑的报表 "部分,了解如何进行修改的提示。
要创建新报表或保存当前报表,分别使用NewReport和SaveReport方法。要检查当前报表是否在打开或最后保存后被修改,请使用IsReportDirty属性。每当通过编辑器更改、打开或保存报表时,这个属性都会自动更新。
命令
编辑器支持各种标准菜单命令,可以通过InvokeCommand方法调用。例如,要对齐当前在编辑器中选择的报表项的左侧,使用以下代码调用标准命令AlignLeft。
C#
reportEditor.InvokeCommand(StandardCommands.Align);
Visual Basic
reportEditor.InvokeCommand(StandardCommands.Align)另外,还可以通过MenuCommandService调用命令,该命令可以通过编辑器的GetService方法获得。
下表列出了编辑器支持的大部分标准菜单命令。
此外,编辑器还支持MenuCommands类的自定义菜单命令。
将UI元素与命令关联起来
报告编辑器提供了监听支持的命令变化的方法。当应用程序中的一个UI元素需要与一个特定的命令相关联时,这很有用。当命令未启用时,该元素需要自动灰化(或禁用)以表明这一点。例如,当Undo不可用时,应用程序中触发Undo命令的按钮应该被禁用。
要监听命令的变化,将一个实现ICommandListener接口的类的实例(以及相应命令的ID)传递给RegisterCommandListener方法。当具有指定ID的命令的状态发生变化时,通过其UpdateState方法通知指定的监听器。
ICommandListener接口的实现取决于需要更新的用户元素的类型。例如,让我们检查一个应用程序,它提供了一个ToolStripButton组件来触发各种命令。下面是这个应用程序的ICommandListener接口的一个示例实现。
C#
private class ToolStripItemCommandListener : ICommandListener
{
public CommandListener(ToolStripItem item)
{
this.item = item;
}
public void UpdateState(bool enabled, bool visible)
{
item.Enabled = enabled;
item.Visible = visible;
}
private ToolStripItem item;
}
Visual Basic
Private Class CommandListener Implements ICommandListener Public Sub New(item As ToolStripItem) Me.item = item End Sub Public Sub UpdateState(enabled As Boolean, visible As Boolean) Implements ICommandListener.UpdateState item.Enabled = enabled item.Visible = visible End Sub Private item As ToolStripItem End Class让我们假设 undoButton 是应用程序中现有的 ToolStripButton,它应该触发 Undo 命令。那么下面的代码将把 undoButton 与 Undo 命令关联起来。
reportEditor.RegisterCommandListener(StandardCommands.Undo, new CommandListener(undoButton));Visual Basic
reportEditor.RegisterCommandListener(StandardCommands.Undo, New CommandListener(undoButton))现在,当Undo可用时,按钮将被启用,当Undo不可用时,按钮将被禁用。
注册数据源
数据源代表报表元素可以绑定的数据对象。任何对象都可以作为数据源,包括DataSet、业务对象的数组、自定义对象等。数据源可以通过AddDataSource重载之一添加到编辑器中。新添加的数据源会以组件的形式出现在设计器区域底部的小托盘窗口中,随后可以在属性网格内选择数据源作为DataRange和Chart报表项的数据源。在编辑器中添加数据源并不会导致编辑的报表变脏,也不会以任何方式改变报表,直到数据源真正被选为报表项的DataSource。创建新报表(通过NewReport)或关闭当前报表(通过CloseReport)不会导致注册的数据源消失。
当一个数据源被添加到编辑器中时,它将与一个唯一的名称相关联。该名称在保存报表时被序列化,并在反序列化过程中用于识别项目所绑定的数据源。数据源的名称可以通过使用 AddDataSource overload 显式指定,也可以通过使用 AddDataSource overload 由编辑器自动生成。这两个重载都会返回一个IComponent对象,它是编辑器内部代表数据源的组件。在编辑器自动生成数据源名称的情况下,这个名称可以通过返回对象的IComponent.Site.Name属性获得。
DataRange对象可以从注册的数据源中自动创建。要做到这一点,请在设计器区域内的页面上点击右键,并在上下文菜单中选择 "Create DataRange from Data Source... "项。这将显示一个对话框,里面有所有注册的数据源和它们的字段或属性。用户可以选择要包含在生成的DataRange中的成员。
以编程方式修改报表
编辑后的报表不应直接修改。更具体地说,不应该通过构造函数创建新的项目并添加到报表或项目容器中,也不应该通过属性分配删除或修改现有项目。直接修改不会被撤销引擎跟踪,不会自动更新设计器表面和UI元素,而且往往会引起异常。例如,不建议进行以下修改。
C#
reportEditor.Report.Pages.Add(new Page())。 reportEditor.Report.Pages[0].Items[0].Location = new Location(10, 10); reportEditor.Report.Pages.RemoveAt(0);Visual Basic
reportEditor.Report.Pages.Add(New Page()) reportEditor.Report.Pages[0].Items[0].Location = New Location(10, 10) reportEditor.Report.Pages.RemoveAt(0)创建项目
新项目应该通过IDesignerHost服务来创建。可以通过调用GetService方法从编辑器中获得对该服务的引用。下面的代码说明了如何创建一个新的页面。
C#
IDesignerHost designerHost = reportEditor.GetService<IDesignerHost>(); Page newPage = designerHost.CreateComponent(typeof(Page)) as Page.CreateComponent(typeof(Page));Visual Basic
Dim designerHost As IDesignerHost = reportEditor.GetService(Of IDesignerHost)() Dim newPage As Page = CType(designerHost.CreateComponent(GetType(Page)), Page)添加项目
向容器中添加新的项目应该通过调用IComponentChangeService的OnComponentChanging和OnComponentChanged方法来包装。这个服务的引用也可以通过GetService方法获得。下面的代码说明了如何将之前创建的页面实例添加到报表中。
C#
IComponentChangeService componentChange = reportEditor.GetService<IComponentChangeService>(); componentChange.OnComponentChanging(reportEditor.Report, null); reportEditor.Report.Pages.Add(newPage); componentChange.OnComponentChanged(reportEditor.Report, null, null, null);Visual Basic
Dim componentChange As IComponentChangeService = reportEditor.GetService(Of IComponentChangeService)() componentChange.OnComponentChanging(reportEditor.Report, Nothing) reportEditor.Report.Pages.Add(newPage) componentChange.OnComponentChanged(reportEditor.Report, Nothing, Nothing, Nothing);修改项目
PropertyDescriptor locationProperty = TypeDescriptor.GetProperties(item)["Location"]; locationProperty.SetValue(item, new Location(0, 0));Visual Basic
Dim locationProperty As PropertyDescriptor = TypeDescriptor.GetProperties(item)("Location") locationProperty.SetValue(item, New Location(0, 0))移除项目
IDesignerHost designerHost = reportEditor.GetService<IDesignerHost>()。 IComponentChangeService componentChange = reportEditor.GetService<IComponentChangeService>(); componentChange.OnComponentChanging(reportEditor.Report, null); page removedPage = reportEditor.Report.Pages[0]; reportEditor.Report.Pages.RemoveAt(0); componentChange.OnComponentChanged(reportEditor.Report, null, null, null); designerHost.DestroyComponent(removementPage);Visual Basic
Dim designerHost As IDesignerHost = reportEditor.GetService(Of IDesignerHost)() Dim componentChange As IComponentChangeService = reportEditor.GetService(Of IComponentChangeService)() componentChange.OnComponentChanging(reportEditor.Report, Nothing) Dim removedPage as Page = reportEditor.Report.Pages(0) reportEditor.Report.Pages.RemoveAt(0) componentChange.OnComponentChanged(reportEditor.Report, Nothing, Nothing, Nothing) designerHost.DestroyComponent(removementPage)备注
使用事务
对报告的每一次修改都会在撤销历史记录中产生一条撤销记录。由于各种间接的修改,如新创建对象的属性初始化,有些修改甚至会产生不止一条记录。为了将多个修改打包成一条撤销记录,可以在一个事务中执行。下面的例子是在一个事务内部修改一个现有项目的位置和大小。
C#
IDesignerHost designerHost = reportEditor.GetService<IDesignerHost>(); 使用(DesignerTransaction transaction = designerHost.CreateTransaction("修改项目")) { PropertyDescriptor locationProperty = TypeDescriptor.GetProperties(item)["Location"]; locationProperty.SetValue(item, new Location(0, 0)); PropertyDescriptor sizeProperty = TypeDescriptor.GetProperties(item)["Size"]; sizeProperty.SetValue(item, new Dimension(20, 20)); transaction.Commit(); }Visual Basic
Dim designerHost As IDesignerHost = reportEditor.GetService(Of IDesignerHost)() Using transaction As DesignerTransaction = designerHost.CreateTransaction("Modifying item") Dim locationProperty As PropertyDescriptor = TypeDescriptor.GetProperties(item)("Location") locationProperty.SetValue(item, New Location(0, 0)) Dim sizeProperty As PropertyDescriptor = TypeDescriptor.GetProperties(item)("Size") sizeProperty.SetValue(item, New Dimension(20, 20)) transaction.Commit() End Using也可以嵌套交易。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
原生的Windows Forms编程组件,可为任何.NET应用程序提供专业的报表功能
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢