You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Kendo UI表格单元格加类或单列仅允许数字输入实现咨询

Kendo UI Grid 单元格自定义类与数字输入列实现方案

我来帮你搞定这两个Kendo Grid的需求,结合你给出的ASP.NET MVC代码片段,给你具体的实现方案:


一、为表格单元格添加自定义类

1. 给指定列的所有单元格统一加类

最简单的方式是在列定义中使用.Attributes()方法,直接给目标列的所有单元格(非编辑状态)添加自定义CSS类。比如你要给AllowanceAmount列加类:

@(Html.Kendo().Grid(Model.GroupOfAllowancesKendoGrid)
    .Name("gridAllowance")
    .Columns(columns => {
        columns.Bound(p => p.EmployeeName);
        columns.Bound(p => p.Department);
        columns.Bound(p => p.Section);
        // 为AllowanceAmount列的单元格添加自定义类
        columns.Bound(p => p.AllowanceAmount)
            .Attributes(new { @class = "custom-amount-cell" })
            // 如果需要给表头也加类,用下面这行
            .HeaderHtmlAttributes(new { @class = "custom-amount-header" });
        // 其他列配置...
    })
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model => {
            model.Id(p => p.Id);
            model.Field(p => p.EmployeeName).Editable(false);
            model.Field(p => p.Department).Editable(false);
            model.Field(p => p.Section).Editable(false);
            // 其他字段配置...
        })
        // 其他数据源配置...
    )
)

注意:添加类后,你可以在CSS中定义样式,比如让单元格右对齐:

.custom-amount-cell {
    text-align: right;
    font-weight: 500;
}

2. 根据数据动态添加自定义类

如果需要根据单元格的值动态设置类(比如金额超过阈值时高亮),可以通过dataBound事件实现:

@(Html.Kendo().Grid(Model.GroupOfAllowancesKendoGrid)
    .Name("gridAllowance")
    // 绑定数据绑定完成事件
    .Events(events => events.DataBound("onGridDataBound"))
    // 其他列和数据源配置...
)

<script>
function onGridDataBound(e) {
    const grid = this;
    // 遍历所有数据行
    grid.tbody.find("tr").each(function() {
        const dataItem = grid.dataItem(this);
        // 找到目标列的单元格(这里假设AllowanceAmount是第4列,索引从0开始)
        const amountCell = $(this).find("td:eq(3)");
        // 根据条件添加类
        if (dataItem.AllowanceAmount > 1000) {
            amountCell.addClass("highlight-high-amount");
        }
    });
}
</script>

<style>
.highlight-high-amount {
    background-color: #fff3cd;
    color: #856404;
}
</style>

二、实现某一列仅允许输入数字

推荐结合Kendo的NumericTextBox编辑器和数据验证,确保输入规范且前后端都有校验:

1. 使用自定义编辑器模板(推荐)

这种方式更灵活,可复用性高。首先在Views/Shared/EditorTemplates文件夹下创建NumericEditor.cshtml

@model decimal?

@(Html.Kendo().NumericTextBoxFor(m => m)
    .Min(0) // 设置允许的最小值,比如不能为负数
    .Max(999999) // 设置允许的最大值
    .Decimals(2) // 限制小数位数
    .HtmlAttributes(new { style = "width: 100%" })
)

然后在Grid的列定义中指定这个模板:

@(Html.Kendo().Grid(Model.GroupOfAllowancesKendoGrid)
    .Name("gridAllowance")
    .Columns(columns => {
        // 其他列...
        columns.Bound(p => p.AllowanceAmount)
            .EditorTemplateName("NumericEditor"); // 关联自定义编辑器
    })
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model => {
            model.Id(p => p.Id);
            // 设置字段类型为decimal,确保数据源层面的类型校验
            model.Field(p => p.AllowanceAmount).Type(typeof(decimal));
            // 其他字段配置...
        })
        // 其他数据源配置...
    )
)

2. 直接在列中配置编辑器(无需模板)

如果不想单独创建模板,也可以直接在列的.Editor()方法中定义:

columns.Bound(p => p.AllowanceAmount)
    .Editor(container => {
        Html.Kendo().NumericTextBoxFor(m => m)
            .Min(0)
            .Decimals(2)
            .Name("AllowanceAmount") // 必须和字段名称一致,确保数据绑定正常
            .Render();
    });

3. 结合后端数据注解验证

在你的Model类中添加数据注解,实现前后端双重验证:

public class AllowanceModel {
    public int Id { get; set; }
    public string EmployeeName { get; set; }
    public string Department { get; set; }
    public string Section { get; set; }
    
    [Range(0, 999999, ErrorMessage = "金额必须在0到999999之间")]
    [DataType(DataType.Currency)]
    public decimal AllowanceAmount { get; set; }
}

这样用户输入非数字或超出范围的值时,Kendo Grid会自动弹出验证提示,同时后端接口也会进行校验,避免非法数据入库。


内容的提问来源于stack exchange,提问作者Søśø ÐålợȜà ZåȜră

火山引擎 最新活动