You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在ASP.NET Core DevExpress Dashboard的GridView中添加带按钮的列

给DevExpress Dashboard现有GridView添加按钮列的正确实现方式

你当前的代码思路有误:你通过C#控制器新增了一个自定义网格项,但你的需求是修改已存在的GridView组件,而非创建新的自定义控件。以下是正确的实现步骤:

1. 简化C#控制器代码

不需要添加自定义DashboardItem,保持默认的DashboardController即可,我们将通过前端客户端API修改现有GridView:

using DevExpress.DashboardAspNetCore;
using DevExpress.DashboardWeb;
using Microsoft.AspNetCore.Mvc;

namespace DXApplication2.Controllers
{
    public class EighthDashboardController : DashboardController
    {
        public EighthDashboardController(DashboardConfigurator configurator) : base(configurator)
        {
        }
    }
}

2. 前端客户端API实现按钮列添加

利用DevExpress Dashboard的ItemWidgetCreated事件,在目标GridView组件创建完成后动态添加按钮列:

核心JS代码

// 仪表板初始化完成后绑定组件创建事件
function onDashboardInit(s, e) {
    s.ItemWidgetCreated.addHandler(function (args) {
        // 筛选出目标GridView:可通过组件名称(XML中定义的ComponentName)或类型判断
        if (args.ItemName === "yourGridComponentName" || args.ItemType === "Grid") {
            var dataGrid = args.GetWidget();
            
            // 添加自定义按钮列
            dataGrid.addColumn({
                caption: '操作',
                width: 120,
                alignment: 'center',
                cellTemplate: function (container, options) {
                    // 创建按钮并绑定点击事件
                    $('<button>')
                        .text('点击')
                        .addClass('dx-button dx-button-mode-contained dx-button-default') // 匹配DevExpress样式
                        .on('click', function () {
                            // 获取当前行数据
                            var rowData = options.data;
                            alert('行数据:' + JSON.stringify(rowData));
                        })
                        .appendTo(container);
                }
            });
        }
    });
}

前端页面初始化Dashboard控件

在承载Dashboard的页面(如Razor视图)中,初始化控件并绑定事件:

<div id="dashboardContainer" style="width: 100%; height: 800px;"></div>

<script src="~/lib/devexpress-dashboard/dashboard.js"></script>
<script>
    $(function () {
        var dashboardControl = new DevExpress.Dashboard.DashboardControl(
            document.getElementById("dashboardContainer"),
            {
                endpoint: "/EighthDashboard", // 对应你的控制器路由
                workingMode: "Viewer" // 根据你的需求设置工作模式
            }
        );
        
        // 绑定初始化事件
        dashboardControl.on("initialized", onDashboardInit);
        dashboardControl.render();
    });
</script>

关键注意事项

  • 不要用自定义项修改现有组件:自定义项是用来创建全新的自定义仪表板控件,而非修改已有控件。
  • 正确识别目标GridViewargs.ItemName对应你XML仪表板中GridView的ComponentName属性,用这个判断比类型更精准,避免影响其他GridView。
  • 修正HTML转义问题:你之前JS代码中的&lt;是HTML转义字符,在JS的cellTemplate中应直接使用<button>,否则无法正确渲染按钮元素。
  • 统一样式:给按钮添加DevExpress内置样式类,确保和仪表板整体风格一致。

内容的提问来源于stack exchange,提问作者Abanop Nabil

火山引擎 最新活动