C# 剑道网格:对数组对象进行过滤
我想在剑道网格上过滤它的模型有对象列表 我的筛选器无法处理联系人列表: 以下是我的javascript代码: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
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);
}