2017-05-31 57 views
0

我有一個劍道電網和我已經APPY列過濾器,我需要過濾這一結果與文本框的值我試着像如何過濾器劍道網格相對於列過濾器和搜索框的文本值

var sText = $("#searchBox").val(); 
       if (sText.length > 0) { 
       var filterChild = []; 
       var filtOut = []; 
       var ds = $('#homeGridCustomer').data('kendoGrid').dataSource; 
       var curr_filters = ds.filter(); 
       filterChild.push({ field: "Name", operator: "contains", value: sText }); 
       filterChild.push({ field: "City", operator: "contains", value: sText }); 
       filterChild.push({ field: "CustomerNo", operator: "contains", value: sText }); 
       var filtParent = { filters: filterChild, logic: "or" }; 
       if (curr_filters != undefined) { 
        filtOut.push(curr_filters); 
       } 
       filtOut.push(filtParent); 
       ds.filter({ filters: filtOut, logic: "and" }); 

但它沒有得到過濾輸出,沒有任何顯示。誰能幫忙?在此先感謝

回答

1

如果您希望基於相同的輸入值將多個搜索過濾器應用於dataSource中的多個列,並維護已應用的現有過濾器(可以在搜索區域中未輸入任何內容時清除過濾器),請嘗試使用:

var ds = $("#grid").data("kendoGrid").dataSource;   

var sText = $("#nameOfYourInput").val(); 
var filterToApply = ds.filter(); 
if(!filterToApply) { 
    // if not, setup new filter 
    filterToApply = { 
    logic: "and", // use OR here if you want to search for a value in either column instead of all columns 
    filters: [] 
    } 
} 

var applyFilters = false; 
// check to see if `sText` contains value before filtering (as filter will apply like `Name`/`City`/`CustomerNo` `contains` `null`/`undefined` otherwise) 
if(sText) { 
    applyFilters = true; 
    filterToApply.filters.push({field: "foo", operator: "contains", value: sText}); 
    filterToApply.filters.push({field: "bar", operator: "contains", value: sText});  
} 
if(applyFilters) { 
    ds.filter([filterToApply]); 
} 
else { 
    ds.filter([]); 
} 

我附上一個jsbin example供您使用缺省玩要根據新的輸入值覆蓋現有電網的過濾器,並已包括註釋掉可以用來建立在代碼現有過濾器的頂部。希望你能從中得到你所需要的。