C# 剑道网格:对数组对象进行过滤

C# 剑道网格:对数组对象进行过滤,c#,javascript,kendo-ui,kendo-grid,C#,Javascript,Kendo Ui,Kendo Grid,我想在剑道网格上过滤它的模型有对象列表 我的筛选器无法处理联系人列表: 以下是我的javascript代码: var typeFilter; var contactsFilter; var datesFilter; var ByFiler; var zeroFilter = { field: "ID", operator: "eq", value: 0 }; function filterOnMultiSelectContacts(e) { var filte

我想在剑道网格上过滤它的模型有对象列表

我的筛选器无法处理联系人列表:

以下是我的javascript代码:

var typeFilter;
var contactsFilter;
var datesFilter;
var ByFiler;
var zeroFilter = {
    field: "ID",
    operator: "eq",
    value: 0
};

function filterOnMultiSelectContacts(e) {

    var filters;
    for (var i = 0; i < $('#ContactsDropDownFilter').data("kendoMultiSelect").dataItems().length; i++)
    {
        filters =[
                    {
                        field: "Contacts.ContactID",
                        operator: "eq",
                        value: Number($('#ContactsDropDownFilter').data("kendoMultiSelect").dataItems()[i].ContactID)
                    },
                        zeroFilter
        ]
    }

    contactsFilter = {
        logic: "or",
        filters: filters
    };
    applyFilters();
}

function TypeChanged(e) {
    var type = $("#SelectedType").val();
    var value = Number(type);

    if (value === -1) {
        typeFilter = null;
    }
    else {
        typeFilter = {
            logic: "or",
            filters: [
                {
                    field: "Type",
                    operator: "eq",
                    value: value
                },
                zeroFilter
            ]
        };
    }
    applyFilters();
}


function applyFilters() {
    var ds = $("#Grid").data("kendoGrid").dataSource;
    var filters = [];

    if (typeFilter) filters.push(typeFilter);
    if (contactsFilter) filters.push(contactsFilter);
    if (datesFilter) filters.push(datesFilter);
    ds.filter(filters);
}
编辑 我在模型中添加了ContactIds,其中包含联系人的id(而不是整个对象)。我想出了这个,但它仍然不起作用

function filterOnMultiSelectContacts(e) {
    contactsFilter = null;
    var ContactIdsList = new Array();
    for (var i = 0; i < $('#LogEventContactsDropDownFilter').val().length; i++)
    {
        ContactIdsList.push(Number($('#LogEventContactsDropDownFilter').val()[i]));
    }

    var filters;
    if ($('#LogEventContactsDropDownFilter').data("kendoMultiSelect").dataItems().length > 0) {
        filters = [
                    {
                        field: "ContactIDs",
                        operator: "eq",
                        value: ContactIdsList
                    }
                    ,
                    zeroFilter
        ];
        contactsFilter = {
            logic: "or",
            filters: filters
        };
    }
    else
    {
        contactsFilter = null;
    }
    applyFilters();
}   
功能过滤器多选择触点(e){
contactsFilter=null;
var ContactIdsList=新数组();
对于(var i=0;i<$('#LogEventContactsDropDownFilter').val().length;i++)
{
ContactIdsList.push(数字($('#LogEventContactsDropDownFilter').val()[i]);
}
var滤波器;
if($('#LogEventContactsDropDownFilter').data(“kendoMultiSelect”).dataItems().length>0){
过滤器=[
{
字段:“联系人ID”,
操作员:“eq”,
值:ContactIdsList
}
,
零滤波器
];
contactsFilter={
逻辑:“或”,
过滤器:过滤器
};
}
其他的
{
contactsFilter=null;
}
applyFilters();
}   

我终于成功了,以下是解决方案:

MyFunctions = {
    getIntersect: function (arr1, arr2) {
        var intersect = [];

        for (i = 0; i < arr2.length; i++) {
            if ($.inArray(arr2[i], arr1) > -1)
                intersect.push(arr2[i]);
        }

        return intersect;
    }
}

function filterOnMultiSelectContacts(e) {
    filterBtnClicked(e, $(this));
    contactsFilter = null;

    var filters;
    if ($('#LogEventContactsDropDownFilter').data("kendoMultiSelect").dataItems().length > 0)
    {
        var ContactIdsList = new Array();
        for (var i = 0; i < $('#LogEventContactsDropDownFilter').val().length; i++) {
            ContactIdsList.push(Number($('#LogEventContactsDropDownFilter').val()[i]));
        }
        filters = [
                    {
                        field: "ContactIDs",
                        operator: function (items, filterValue) {

                            var intersect = MyFunctions.getIntersect(items, ContactIdsList);
                            if (intersect.length > 0) return true;
                            return false;
                        },
                        value: ContactIdsList
                    }
                    ,
                    zeroFilter
                ];
        contactsFilter = {
            logic: "or",
            filters: filters
        };
    }

    else
    {
        contactsFilter = null;
    }
    applyFilters();
}

function applyFilters() {
    var ds = $("#Grid").data("kendoGrid").dataSource;
    var filters = [];

    if (typeFilter) filters.push(typeFilter);
    if (contactsFilter) filters.push(contactsFilter);
    if (datesFilter) filters.push(datesFilter);
    ds.filter(filters);
}
MyFunctions={
getIntersect:函数(arr1、arr2){
var=[];
对于(i=0;i-1)
相交推(arr2[i]);
}
返回交点;
}
}
多选触点功能过滤器(e){
filterBtnClicked(e,$(this));
contactsFilter=null;
var滤波器;
if($('#LogEventContactsDropDownFilter').data(“kendoMultiSelect”).dataItems().length>0)
{
var ContactIdsList=新数组();
对于(var i=0;i<$('#LogEventContactsDropDownFilter').val().length;i++){
ContactIdsList.push(数字($('#LogEventContactsDropDownFilter').val()[i]);
}
过滤器=[
{
字段:“联系人ID”,
操作员:函数(项、过滤器值){
var intersect=MyFunctions.getIntersect(项目、联系人列表);
如果(intersect.length>0)返回true;
返回false;
},
值:ContactIdsList
}
,
零滤波器
];
contactsFilter={
逻辑:“或”,
过滤器:过滤器
};
}
其他的
{
contactsFilter=null;
}
applyFilters();
}
函数applyFilters(){
var ds=$(“#网格”).data(“kendoGrid”).dataSource;
var过滤器=[];
if(typeFilter)filters.push(typeFilter);
if(contactsFilter)过滤器。按下(contactsFilter);
if(datesFilter)filters.push(datesFilter);
ds.过滤器(过滤器);
}
我需要创建一个函数,该函数将给定数组与网格数据源的项相交

MyFunctions = {
    getIntersect: function (arr1, arr2) {
        var intersect = [];

        for (i = 0; i < arr2.length; i++) {
            if ($.inArray(arr2[i], arr1) > -1)
                intersect.push(arr2[i]);
        }

        return intersect;
    }
}

function filterOnMultiSelectContacts(e) {
    filterBtnClicked(e, $(this));
    contactsFilter = null;

    var filters;
    if ($('#LogEventContactsDropDownFilter').data("kendoMultiSelect").dataItems().length > 0)
    {
        var ContactIdsList = new Array();
        for (var i = 0; i < $('#LogEventContactsDropDownFilter').val().length; i++) {
            ContactIdsList.push(Number($('#LogEventContactsDropDownFilter').val()[i]));
        }
        filters = [
                    {
                        field: "ContactIDs",
                        operator: function (items, filterValue) {

                            var intersect = MyFunctions.getIntersect(items, ContactIdsList);
                            if (intersect.length > 0) return true;
                            return false;
                        },
                        value: ContactIdsList
                    }
                    ,
                    zeroFilter
                ];
        contactsFilter = {
            logic: "or",
            filters: filters
        };
    }

    else
    {
        contactsFilter = null;
    }
    applyFilters();
}

function applyFilters() {
    var ds = $("#Grid").data("kendoGrid").dataSource;
    var filters = [];

    if (typeFilter) filters.push(typeFilter);
    if (contactsFilter) filters.push(contactsFilter);
    if (datesFilter) filters.push(datesFilter);
    ds.filter(filters);
}