自定义网格筛选表达式



快速项目背景:我正在将一些用于 ASP.NET 网格/后端数据源的 Telerik 移植到 Kendo 角度 UI 框架。

问题:我正在尝试实现网格过滤(必须是自定义的,因为我手动绑定以处理复杂的分页/数据检索。

  1. 是否有任何方法/函数可以检索筛选器字符串而不是包含筛选器和运算符的对象模型?(显然,我可以自己扁平化它,但这是一些代码(。这是一个代码片段...

if (filter !== undefined) {
            // Step through column filters
            filter.filters.forEach((element: any) => {
                // console.log(element);
                // Step through individual filter for column
                element.filters.forEach((curFilter: any) => {
                    console.log(curFilter.field);
                    console.log(curFilter.operator);
                    console.log(curFilter.value);
                });
            });
        }

  1. 我仍在使用 .NET 网格用于其筛选器表达式的动态 linq 查询。来自 grid.filters 的筛选器表达式是否可以在后端使用 linq 动态查询正常工作,还是需要转换?

我觉得我在这里错过了一些东西,所以我想我应该开始对话。

谢谢!-布莱恩

我相信

根据您的评论答案,您尝试做的是获取过滤器和排序,就像它在网络上为 MVC 发送一样分页。

要使 kendo 执行此操作,您需要设置数据源类型并在页面中包含正确的文件。

文件名为 kendo.aspnetmvc.js

或 kendo.aspnetmvc.min.js

并且数据源初始化应指定

dataSource: {
   transport: {
      type: 'aspnetmvc-ajax'
   }
}

或者做他们正在做的事情

此脚本的 CDN 为 https://kendo.cdn.telerik.com/2018.1.221/js/kendo.aspnetmvc.min.js

我知道他们使用类似这个函数来做你在说的事情

function serializeFilter(filter, encode) {
            if (filter.filters) {
                return $.map(filter.filters, function (f) {
                    var hasChildren = f.filters && f.filters.length > 1, result = serializeFilter(f, encode);
                    if (result && hasChildren) {
                        result = '(' + result + ')';
                    }
                    return result;
                }).join('~' + filter.logic + '~');
            }
            if (filter.field) {
                return filter.field + '~' + filter.operator + '~' + encodeFilterValue(filter.value, encode);
            } else {
                return undefined;
            }
        }

最新更新