界面开发遇难题?不知如何创建自定义报表?这个工具也许能帮你!(第二弹)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 界面开发遇难题?不知如何创建自定义报表?这个工具也许能帮你!(第二弹)

界面开发遇难题?不知如何创建自定义报表?这个工具也许能帮你!(第二弹)

 2020/9/23 15:43:06  AABBbaby  程序员俱乐部  我要评论(0)
  • 摘要:安全免费高速下载DevExpressv20.1完整版本文记录如何构建自定义的DevExpressReport控件(SwissQR-Bill报表组件),以及如何解决开发过程中遇到的问题,希望这些信息对创建自定义DevExpressReport控件的用户有价值。为帮助消除报表控件开发过程中的神秘性,本文介绍如何创建设计时设置、序列化设计器组件和相关的“bricks”,以及如何渲染和打印组件。第一部分包含有关SwissQRBill控件的一般信息,并描述控件本身的要求;第二部分详细介绍了组件的实现
  • 标签:创建 工具 开发 自定义

安全免费高速下载DevExpress v20.1完整版

本文记录如何构建自定义的DevExpress Report控件(Swiss QR-Bill报表组件),以及如何解决开发过程中遇到的问题,希望这些信息对创建自定义DevExpress Report控件的用户有价值。

为帮助消除报表控件开发过程中的神秘性,本文介绍如何创建设计时设置、序列化设计器组件和相关的“bricks”,以及如何渲染和打印组件。第一部分包含有关Swiss QR Bill控件的一般信息,并描述控件本身的要求;第二部分详细介绍了组件的实现。

"Brick"实现

一般概念

VisualBrick是用于显示数据的基本元素,VisualBrick元素由一个数据模型 (the brick)及其表示形式(the exporter)组成。

Exporter渲染并将其导出为不同的格式,使用"brick"设置的BrickExporter(Type)属性指定"brick"。在本文中,我们使用PanelBrickExporter和VisualBrickExporter后代作为exporter。Draw方法被重写以实现渲染,Brick字段用于获取对"brick"的访问。

若要创建一个"brick",请重写CreateBrick(VisualBrick[] childrenBricks)方法并返回"brick"实例。PutStateToBrick(VisualBrick brick, PrintingSystemBase ps)方法将控件属性映射到"brick"数据,请查看以下文件中的代码以获取更多信息:XRSwissQRBill.cs。

基本类的选择

Swiss QR Control布局是一个中间带有文本元素和条形码的区域,基本类的主要选择是面板、表格和文本"brick"。panel "brick"可以通过其简单的结果将组件布置在内部,因此SwissQRBillBrick基于PanelBrick类,exporter则基于PanelBrickExporter类。

实现Service Brick

该规范指出,付款部分可能包含标有角的空白区域。为了满足此要求,我们创建了一个额外的CornerRectangleBrick和其exporter - CornerRectangleBrickExporter - 它负责绘制角,"brick" 包括BrickType属性 - 可以重写该属性以实现正确的反序列化

布局实现

选择PanelBrick作为基本类,您可以使用Bricks属性访问其内部的"bricks",相对于面板本身的坐标 - 相对于点(0,0)设置内部“brick”坐标。

将组件分为收货和付款部分区域。

渲染功能返回其他"bricks" (或 "brick" 组合),这些 "brick" 随后添加到Bricks集合中。

  • CreateReceiptPart()
  • CreatePaymentPart()

现在,我们必须渲染子区域。

  1. CreateReceiptTitle()
  2. CreateReceiptInformation()
  3. CreateReceiptAmount()
  4. CreateReceiptAcceptancePoint()
  5. CreatePaymentTitle()
  6. CreatePaymentSwissQRCode()
  7. CreatePaymentAmount()
  8. CreatePaymentInformation()
  9. CreatePaymentFurtherInformation()

请查看以下文件中的代码以获取更多信息:SwissQRBillBrick.cs.

Exporter实现

exporter在完成 "brick"上绘制装饰物,这使得可以在预览或导出的PDF文件中更改外观。在本文中exporter绘制穿孔线和其他文本, brick的SeparatorKind选项确定要绘制的内容,用于预览和在PDF导出过程中使用相同的绘制"brick"的机制,主要区别在于传递给exporter的Draw方法的IGraphics是具有IPdfGraphics接口的对象。

序列化

一般概念

控件和"brick"都需要序列化,"brick"仅使用xml序列化,并且控件实现xml序列化并支持CodeDom序列化 - 这对于Visual Studio Designer是必需的。

控件序列化

XtraSerializableProperty属性负责序列化xml中的属性,仅指定属性来序列化返回简单类型的属性,复杂类型需要具有XtraSerializationVisibility参数类型的构造函数(最常用的值是Hidden,Collection,Reference,Content)。

DesignerSerializationVisibility属性负责Visual Studio Designer中的CodeDOM序列化,它只有相关枚举的三个变体 - 隐藏、可见和内容,使用可见属性值标记集合或引用,DefaultValue属性确定属性值是否包含在序列化中。

Brick序列化

XML序列化是必需的,为了正确进行反序列化,请将 "brick’s" 文本类型(在Brick级别上覆盖的BrickType属性)映射为真实类型。BrickFactory.BrickResolve方法用于映射,为实现BrickResolve方法请查看以下文件中的代码:CustomControl.cs

组件使用

要在Visual Studio Designer中使用组件,请将其添加到Visual Studio Toolbox中。

要在最终用户设计器中使用该组件,请使用传递的XRDesignMdiController作为参数来调用AddSwissQRControlToToolBox方法。 请查看以下文件中的代码以获取更多信息:CustomControlToolBoxRegistrator.cs

发表评论
用户名: 匿名