• 如何创建自定义DevExpress报表控件(下)


    下载DevExpress v20.1完整版

    DevExpress技术交流群2:775869749      欢迎一起进群讨论

    DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅、美观且易于使用的应用程序。想要体验?点击下载>>

    本文记录如何构建自定义的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


    获取第一手DevExpress咨询,尽在DevExpress中文网!

  • 相关阅读:
    程序员:不要自称为码农
    SpringBoot对静态资源配置
    LeetCode 572. Subtree of Another Tree(子树)
    LeetCode 437. Path Sum III(统计路径和等于sum的路径数量)
    LeetCode 112. Path Sum(判断路径和是否等于一个数)
    LeetCode 617. Merge Two Binary Trees(归并两棵二叉树)
    LeetCode 226. Invert Binary Tree(翻转二叉树)
    Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.6 的解决办法
    linux-查询某软件的安装的目录
    WebService概念解释
  • 原文地址:https://www.cnblogs.com/AABBbaby/p/13637141.html
Copyright © 2020-2023  润新知