You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kendo Grid jQuery中实现包含两个字段的列过滤

解决Kendo Grid自定义模板列同时过滤多个字段的问题

我来帮你搞定这个Kendo Grid的过滤问题!你遇到的核心痛点是:你的Name列是用FirstName和LastName拼接的自定义模板,但Grid默认只会根据列配置的field属性(这里是FirstName)来做过滤,所以搜不到LastName的内容。下面有两种实用的解决方案,你可以根据自己的场景选择:

方法一:自定义过滤函数(直接在列配置中实现)

这种方法不需要修改数据源,直接给列的过滤单元格替换默认的过滤逻辑,让它同时检查FirstName和LastName两个字段。修改你的列配置如下:

$("#grid").kendoGrid({ 
    autoBind: true, 
    dataSource: { 
        data: tempData, 
        pageSize: 5 
    }, 
    filterable: { mode: "row" }, 
    columns: [ 
        { 
            title: "Name", 
            field: "FirstName", // 这里只是占位,实际过滤逻辑我们自己控制
            template: formatName, 
            width: "250px", 
            filterable: { 
                cell: { 
                    showOperators: false,
                    // 自定义过滤函数
                    filter: function(e) {
                        // 把搜索值转成大写,和你的模板格式保持一致,避免大小写不匹配
                        const searchValue = e.filter.value?.toUpperCase() || '';
                        // 给数据源设置OR条件的过滤,同时匹配FirstName和LastName
                        e.dataSource.filter({
                            logic: "or",
                            filters: [
                                { field: "FirstName", operator: "contains", value: searchValue },
                                { field: "LastName", operator: "contains", value: searchValue }
                            ]
                        });
                    }
                } 
            } 
        },
    ], 
}); 

原理说明:

当用户在过滤框输入内容时,这个自定义的filter函数会覆盖Grid的默认过滤行为,手动给数据源添加一个或逻辑的过滤规则,只要FirstName或LastName包含搜索值,该行就会被保留,完美实现同时搜索两个字段的需求。


方法二:在数据源中添加计算字段

如果你需要多次用到这个拼接后的Name字段(比如排序、过滤都要用到),可以提前在数据源里生成一个计算好的Name字段,让Grid直接基于这个字段做过滤:

$("#grid").kendoGrid({ 
    autoBind: true, 
    dataSource: { 
        data: tempData, 
        pageSize: 5,
        schema: {
            parse: function(data) {
                // 给每条数据添加拼接后的Name字段
                return data.map(item => ({
                    ...item,
                    Name: `${item.LastName.toUpperCase()}, ${item.FirstName.toUpperCase()}`
                }));
            }
        }
    }, 
    filterable: { mode: "row" }, 
    columns: [ 
        { 
            title: "Name", 
            field: "Name", // 现在直接用计算好的Name字段
            template: formatName, 
            width: "250px", 
            filterable: { cell: { showOperators: false } } 
        },
    ], 
}); 

原理说明:

通过schema.parse方法,我们在数据加载时给每条记录新增了一个Name字段,内容和你的模板输出一致。此时Grid的过滤会直接针对这个Name字段,自然就能同时匹配FirstName和LastName的内容了,这种方法更简洁,适合需要复用拼接字段的场景。


额外提示:

两种方法里都把搜索值转成了大写,这是为了和你模板里的toUpperCase()保持一致,避免出现用户输入小写但搜不到大写内容的情况,如果你不需要大小写不敏感的过滤,可以去掉转大写的逻辑。

内容的提问来源于stack exchange,提问作者John S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:57:30