首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有数组类型列的Kendo网格服务器端过滤

带有数组类型列的Kendo网格服务器端过滤
EN

Stack Overflow用户
提问于 2019-05-20 13:23:48
回答 1查看 802关注 0票数 0

我让这个剑道网格对我的网络服务视而不见。其中一列具有一个带有kendo多选择器数组的自定义筛选器,以便客户端可以选择多个ItemTypes。网格显示的数据是正确的,但我的服装过滤器不适用于这个特定的专栏。我从服务中得到了这个错误:“检测到了不兼容类型的二进制操作符,找到了操作数类型'Telerik.Sitefinity.DynamicTypes.Model.ClinicFinder.Clinic.ItemType.ItemType‘和操作符类型’相等‘的'Edm.Int32’”。

我的网格定义

代码语言:javascript
复制
$("#grid").kendoGrid({
dataSource: {
    type: "odata-v4",
    transport: {
        read: {
            url: function () {                    
                return "//myservice/api/clinics?$select=Id,Title,Address,ItemType,productsystems&top=20";
            }
        }
    },
    schema: {
        model: {
            fields: {
                Title: { type: "string" },
                CountryCode: { type: "string" },
                Street: { type: "string" },
                City: { type: "string" },
                Zip: { type: "string" },
                ItemType: { type: "" } 


            }
        }
    },
    serverPaging: true,
    serverFiltering: true,        
    serverSorting: false,
    pageSize: 20
},
pageable: true,
filterable: {
    mode: "row",
    extra: false,
    showOperators: false,
    operators: {
        string: {
            contains: "contains"
        }
    }
},
sortable: false,
columns: [
    { field: "Title", title: "Clinic" },
    { field: "CountryCode", title: "Country" },
    { field: "Street", title: "Address" },
    { field: "City", title: "City"  },
    { field: "Zip", title: "Zip",  filterable: false },       
    { field: "ItemType", title: "Clinic Type", filterable: { multi: true } }
],
rowTemplate: kendo.template($("#template").html())    

});

我的滤波函数

代码语言:javascript
复制
function filterByclinicCategory() {
var filter = { logic: "or", filters: [] };
var grid = $('#grid').data('kendoGrid');
var filterValue = $("#clinicTypeFilter").data("kendoMultiSelect").value();
var clinicCode = [];
if (filterValue.length > 0) {
    $.each(filterValue, function (i, v) {
        clinicCode.push(convertClinicTypesInCodes(v));
        filter.filters.push({
            field: "ItemType", operator: "eq", value: clinicCode, logic: "or"
        });
        grid.dataSource.filter(filter);    
    });

} else {
    $("#grid").data("kendoGrid").dataSource.filter({});
}


}

ItemType是我不能过滤的列。

我的webservice数据

代码语言:javascript
复制
{
"@odata.context": "https://sf-admin-local.medel.com/api/wstest/$metadata#clinics(*)",
"value": [
{
"Id": "896aa08b-2f17-64e6-80bd-ff09000c6e28",
"LastModified": "2019-05-13T09:28:04Z",
"PublicationDate": "2018-06-19T14:19:13Z",
"DateCreated": "2018-06-19T14:19:13Z",
"UrlName": "??",
"Email": "",
"URL": "",
"Telephone": "",
"Title": "????????",
"officeregions": [],
"salespartnerregions": [],
"productsystems": [
"b8ec2a8b-2f17-64e6-80bd-ff09000c6e28",
"1878cb61-ac79-69d9-867b-ff01007297b6",
"1b78cb61-ac79-69d9-867b-ff01007297b6",
"36d8938b-2f17-64e6-80bd-ff09000c6e28"
],
"Area": "",
"Order": 0,
"Tags": [],
"AdditionalInformation": "",
"ImportID": 1,
"Featured": false,
"ItemType": "2",
"Address": {
"Id": "d76aa08b-2f17-64e6-80bd-ff09000c6e28",
"CountryCode": "AT",
"StateCode": "",
"City": "????",
"Zip": "6800",
"Street": "Carinagasse ?????",
"Latitude": 47.2311043,
"Longitude": 9.580079999999953,
"MapZoomLevel": 8
}
}
]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 08:08:24

我使用parameterMap https://docs.telerik.com/kendo-ui/api/javascript/data/datasource/configuration/transport.parametermap修复了它。

我添加了一个parameterMap: functiondata,type)函数,这样我就能够拦截和更改过滤器发出的调用。

代码语言:javascript
复制
 parameterMap: function (data, type) {               
     var c = kendo.data.transports["odata-v4"].parameterMap(data, type);
     if (c.$filter) {
     //my transformation
     c = myTransformation;
     return c;
     } else{
     return c; //not apply transformation loading the data
     }

 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56221905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档