首页 > 其他分享 >DevExpress Web Report Designer中文教程 - 如何自定义控件和表达式注册?

DevExpress Web Report Designer中文教程 - 如何自定义控件和表达式注册?

时间:2024-01-18 09:45:44浏览次数:26  
标签:控件 自定义 Web DevExpress 应用程序 XtraReports CustomControls

获取DevExpress v23.2正式版下载

DevExpress技术交流群9:909157416      欢迎一起进群讨论

自定义控件集成

DevExpress Reports中的自定义报表控件注册变得更加容易,为了满足web开发人员的需求,DevExpressv23.1+包括简化的自定义控件注册支持(在服务器级别实现)。如果您的解决方案需要使用自定义报表控件,所需要做的就是将控件添加到服务器端报表设计模型中的自定义控件集合中,JavaScript函数、属性和值将自动生成。

圆角标签 - 多平台的自定义控件

让我们创建一个示例应用程序(适用于所有支持的Web平台),以帮助说明自定义报表控件注册过程的灵活性。

下面的GitHub示例演示了自定义报表控件的创建/使用:

第一个例子是通用的:探索我们的实现来学习如何创建圆角的自定义报表控件——XRRoundLabel和XRRoundPanel。按照以下步骤在web应用程序中注册XRRoundLabel控件。

1. 从GitHub下载该项目。

2. 打开Blazor示例解决方案,并将DevExpress.XtraReports.CustomControls.RoundedControls项目添加到解决方案中,在Blazor样例项目中引用该项目。

3. 重新构建解决方案。

4. 将XRRoundControl类型添加到自定义控件的报表设计器集合中:

@page "/reportdesigner"
<DxReportDesigner ReportName="TestReport" Height="calc(100vh - 130px)"
Width="100%" AllowMDI="true"
CustomControlTypes="@customTypes">
<DxReportDesignerWizardSettings UseFullscreenWizard="true" />
</DxReportDesigner>
@code {
List<Type> customTypes = new List<Type> {
typeof(DevExpress.XtraReports.CustomControls.RoundBordersControls.XRRoundLabel) };
}

最后,启动应用程序。您将看到自定义控件出现在工具栏中(带有默认的问号图标):

DevExpress Web Report Designer中文教程 - 如何自定义控件和表达式注册?
图标、工具提示和工具栏位置 - 客户端配置

要更改默认图标,请添加一个SVG模板,其名称与自定义控件的完全限定类型名称相匹配:

<script type="text/html" id="dxrd-svg-toolbox-devexpress_xtrareports_customcontrols_roundborderscontrols_xrroundlabel">
<svg viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#a)">
<path d="M22.7 28H27L18.3 4h-4.7L5 28h4.3l2.2-6h9.1l2.1 6Zm-9.8-10L16 9.4l3.1 8.6h-6.2Z" fill="#1177D7"/>
<rect x="1" y="1" width="30" height="30" rx="5" stroke="#727272" stroke-width="2"/>
</g>
<defs>
<clipPath id="a">
<path fill="#fff" d="M0 0h32v32H0z"/>
</clipPath>
</defs>
</svg>
</script>

要更改工具提示并指定工具栏中的位置,请按如下方式处理客户端CustomizeToolbox事件:

@page "/reportdesigner"

<DxReportDesigner ReportName="TestReport" Height="calc(100vh - 130px)"
Width="100%" AllowMDI="true"
CustomControlTypes="@customTypes">
<DxReportDesignerWizardSettings UseFullscreenWizard="true" />
<DxReportDesignerCallbacks CustomizeToolbox="onCustomizeToolbox" />
</DxReportDesigner>

@code {
List<Type> customTypes = new List<Type> {
typeof(DevExpress.XtraReports.CustomControls.RoundBordersControls.XRRoundLabel) };
}

 

function onCustomizeToolbox(s,e){
var info = e.ControlsFactory.getControlInfo("DevExpress.XtraReports.CustomControls.RoundBordersControls.XRRoundLabel");
var labelInfo = e.ControlsFactory.getControlInfo("XRLabel");
info.displayName = "Rounded Label";
info.toolboxIndex = labelInfo.toolboxIndex - 1;
info.group = labelInfo.group;
}

启动应用程序来查看更改:

DevExpress Web Report Designer中文教程 - 如何自定义控件和表达式注册?

如果将控件从工具栏拖到设计器图面上,则该控件将按预期呈现(带有圆角):

DevExpress Web Report Designer中文教程 - 如何自定义控件和表达式注册?

当我们的修改显示在屏幕上时,切换到Print Preview模式后,将看到控件没有作为圆角标签打印(它作为简单标签打印)。首先,这是因为报表文档是在服务器上生成的(呈现给RoundLabelBrick类,而不是文档生成引擎所知道的一个brick类),RoundLabelBrick类必须在内部BrickFactory中注册。相应地,我们需要在Program.cs文件中调用EnsureCustomBrick方法:

DevExpress.XtraReports.CustomControls.RoundedCustomControl.EnsureCustomBrick();

注意:对于进度条控件,BrickFactory注册步骤可以忽略,因为该控件的CreateBrick方法返回PanelBrick的实例,这是一个内置的和已知的。

注册技术与其他基于web的平台基本相同,请注意传递自定义控件类型数组的不同之处:

ASP.NET MVC

@Html.DevExpress().ReportDesigner(settings => {
settings.Name = "ReportDesigner1";
settings.CustomControlTypes.Add(typeof(DevExpress.XtraReports.CustomControls.RoundBordersControls.XRRoundLabel));
}).BindToUrl("TestReport").GetHtml()

ASP.NET Core

对于ASP.NET Core应用程序,自定义控件类型传递给在控制器中创建的设计器模型(使用实现IReportDesignerModelBuilder接口的模型构建器):

public class HomeController : Controller {
// ...
public IActionResult Designer(
[FromServices] IReportDesignerModelBuilder reportDesignerModelBuilder,
[FromQuery] string reportName) {

reportName = string.IsNullOrEmpty(reportName) ? "TestReport" : reportName;
var designerModel = reportDesignerModelBuilder
.Report(reportName)
.CustomControls(typeof(DevExpress.XtraReports.CustomControls.RoundBordersControls.XRRoundLabel))
.BuildModel();
return View(designerModel);
}
}

用于JavaScript框架(Angular、React、Vue)的DevExpress组件是基于aj ASP. NET Core服务器端应用程序,这意味着不需要客户端代码。您必须向ASP. NET Core后端添加自定义控件类型,如上面的代码片段所示(并在客户端应用程序中包含工具栏图标的SVG模板)。

在这个特定的实例中,我们必须在所有示例项目的应用程序启动时调用DevExpress.XtraReports.CustomControls.RoundedCustomControl.EnsureCustomBrick方法。

自定义表达式函数集成

要在web应用程序中注册自定义表达式函数,您需要在启动应用程序时调用以下注册方法当中的一个。

注册方法

范围:仅报表组件

CustomFunctions. Register方法允许您在表达式绑定和计算字段中使用指定的自定义函数,自定义函数显示在Reporting Expression Editor中的可用函数列表中。

DevExpress.XtraReports.Expressions.CustomFunctions.Register(new CustomFormatFunction());

范围:所有DevExpress组件 - 数据源向导、查询生成器等

如果您希望自定义函数在数据源向导或应用程序中的其他地方(在我们的报表组件之外)可用于SQL查询,请实现ICustomFunctionOperatorFormattable接口并使用CriteriaOperator. RegisterCustomFunction方法注册该函数。

标签:控件,自定义,Web,DevExpress,应用程序,XtraReports,CustomControls
From: https://www.cnblogs.com/AABBbaby/p/17971803

相关文章

  • 数据探索之道:查询Web API数据中的JSON字符串列
    前言在当今数据驱动的时代,对数据进行探索和分析变得愈发关键。WebAPI作为广泛应用的数据源,提供了丰富的信息和资源。然而,面对包含JSON字符串列的WebAPI数据时,我们常常遇到一个挑战:如何高效灵活地处理和查询这些数据?这个问题在数据探索和提取过程中频繁出现。因此小编今天以葡萄......
  • Qt/C++自定义界面大全/20套精美皮肤/26套精美UI界面/一键换肤/自定义颜色/各种导航界
    一、前言这个系列对应自定义控件大全,一个专注于控件的编写,一个专注于UI界面的编写,程序员有两大软肋,一个是忌讳别人说自己的程序很烂很多bug,一个就是不擅长UI,基本上配色就直接rgb,对于第一点,只要放松心态,直面自己的不足,不断改进,才能问鼎武林至尊。至于第二点,因为程序员擅长的是逻辑......
  • .net 温故知新【17】:Asp.Net Core WebAPI 中间件
    一、前言到这篇文章为止,关于.NET"温故知新"系列的基础知识就完结了,从这一系列的系统回顾和再学习,对于.NETcore、ASP.NETCORE又有了一个新的认识。不光是从使用,还包括这些知识点的原理,虽然深入原理谈不上,但对于日常使用也够了,我想的是知其然,知其所以然。在实际开发过程中可能......
  • 42 干货系列从零用Rust编写负载均衡及代理,wmproxy中配置tcp转websocket
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,反向代理,静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代理等,会将实现过程分享出来,感兴趣的可以一起造个轮子项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/......
  • 开发者必会的技能 -- 自定义注解
    注解对于开发者而言是再熟悉不过的.注解可以大幅度提升开发的效率,减少重复代码.但是在程序员多种多样、纷繁复杂的业务需求的背景下,Spring以及Java提供的注解显得力不从心,所以自己创建自定义注解成为程序员的必备技能!基本知识在Java中,注解分为两种,元注解和自定义注解.一......
  • webserver2003解析
    webserver解析/etc/os-release查看操作系统发行版本netstat-tunal查看开放端口或者使用kalinmap-sV-p-192.168.218.131查看22/tcpopensshOpenSSH8.2p1Ubuntu4ubuntu0.4(UbuntuLinux;protocol2.0)80/tcpopenhttpApachehttpd2.4.41((Ubunt......
  • Android平台Unity下如何通过WebCamTexture采集摄像头数据并推送至RTMP服务器或轻量级R
    技术背景我们在对接Unity下推送模块的时候,遇到这样的技术诉求,开发者希望在Android的Unity场景下,获取到前后摄像头的数据,并投递到RTMP服务器,实现低延迟的数据采集处理。在此之前,我们已经有了非常成熟的RTMP推送模块,也实现了Android平台Unity环境下的Camera场景采集,针对这个技术需求,......
  • net6 webapi swagger 中文\版本说明
    1、新建ApiVersionInfo.cs版本文件;///<summary>///API版本///</summary>publicclassApiVersionInfo{publicstaticstring接口版本1;}右键编辑项目文件;<PropertyGroup><GenerateDocumentationFile>true</GenerateDocumentationFile>......
  • net6 webapi cors 跨域
    1、nuget安装microsoft.aspnetcore.cors2、program.cs文件中usingSystem.Reflection;usingMicrosoft.OpenApi.Models;varbuilder=WebApplication.CreateBuilder(args);//设置跨域builder.Services.AddCors(options=>{options.AddPolicy("Cors",builder......
  • 前后端分离,Asp.net core webapi 简单 2 步,轻松配置跨域
    前言可以说,前后端分离已经成为当今信息系统项目开发的主流软件架构模式,微服务的出现,让前后端分离发展更是迅速,大量优秀的前端框架如vue.js、react的出现,也让前后端分离趋势加快。所谓的前后端分离软件架构模式,就是指将前端和后端的开发完全分离,后端负责提供API接口和数据处理......