2012-12-18 26 views
16

KendoUI ızgarası için bir arama kutusu oluşturmaya çalışıyorum. Bir alana dayalı bir arama yapmak için bir başlangıç ​​yapabildim, ancak arama kutumdaki değerin, ızgaradaki tüm sütunları aramasını istiyorum. jsfiddle.net ancak işe almak gibi olamaz ....KendoUI Grid'deki Tüm Sütunları Ara

+0

Ben ancak çalışmıyor mantık operatörü kullanarak çalıştı ... $ ("# grid") verileri ("kendoGrid") dataSource.filter ({ mantık.:. "Veya" filtreler: [ {field: "ProductName", işleç: "ne", value: "fee"}, {field: "ProductName", işleç: "ne", value: "fi"} ] }); – BlueBird

cevap

13

ben düşünüyorum (bkz veya mantık düğmesi):

See js fiddle example

function() { 
      grid.data("kendoGrid").dataSource.filter({ 
       field: "ProductName", 
       operator: "contains", 
       value: $('#category').val() 
      }); 

     } 
Burada veya mantık operatörü kullanılarak çalıştı İki koşuldan biriyle eşleştirmek istiyorsanız eq - fee veya eq - fi diyelim.

Göstermek için fiddle numaranızı biraz değiştirdim. Arama kutusuna yazarsanız, ProductName sütununa veya QuantityPerUnit ile eşleşen kayıtları filtrelersiniz.

//change event 
$("#category").keyup(function() { 
    var val = $('#category').val(); 
    $("#grid").data("kendoGrid").dataSource.filter({ 
     logic : "or", 
     filters: [ 
      { 
       field : "ProductName", 
       operator: "contains", 
       value : val 
      }, 
      { 
       field : "QuantityPerUnit", 
       operator: "contains", 
       value : val 
      } 
     ] 
    }); 
}); 

ÖNEMLİ: Ben o iş yapmak için 1.8.2 jQuery sürümünü güncellemek zorunda ve her ihtimale karşı ben son sürümüne yanı, KendoUI ürünü güncelledik.

4

Sütun adları hakkında endişelenmek istemiyorsanız, bunun yerine bu kodu kullanabilirsiniz. Herhangi bir kılavuz üzerinde çalışacak ve kodlanmış sütun adlarını belirtmeden filtrelenebilir olarak işaretlenmiş tüm sütunları arayacaktır. Ayrıca, ek bir etkinlik ekledim, böylece birisi bir arama sorgusu kopyalayıp yapıştırırsa etkinlik çağrılırdı. (Bu ayrıca jQuery 1.83 veya üstü gerektirir). JQuery Datatables eklentisinden Kendo UI Grid'e geçtikten sonra bu kodu oluşturdum. Kendo'yu seviyorum ama DataTables tarafından sunulan global arama metin kutusunu gerçekten kaçırdım. Bu kodu tüm Kendo Izgaralarıma dahil ediyorum.

 $("#category").on("keypress blur change", function() { 
     var filter = { logic: "or", filters: [] }; 
     $searchValue = $(this).val(); 
     if ($searchValue) { 
      $.each($("#grid").data("kendoGrid").columns, function(key, column) { 
       if(column.filterable) { 
        filter.filters.push({ field: column.field, operator:"contains", value:$searchValue}); 
       } 
      }); 
     } 
     $("#grid").data("kendoGrid").dataSource.query({ filter: filter }); 
    }); 
+0

Tam olarak ne yaptığımı, ancak şimdi sadece veri kaynağında bulunan gizli sütunları filtrelemeye çalışıyorum, şimdi muhtemelen başka bir yaklaşıma geçmek zorunda kalacağım –

+0

Harika çalışma Mat .. Kendo UI kılavuzuna geçmek istiyorum Datatables grid'in yanı sıra, Bu yaygın arama özelliği, tüm bu günlerde bunu yapmamı engelliyordu. Şimdi bu tamamen Kendo UI ızgarasına geçmeme yardımcı oluyor. işin için teşekkürler –

4

OnaBai'nin yanıtı, veri tabloları gibi çalışmaz Veri tabloları, alanları alanlara ve alanlara göre işlemektedir. Eğer "chef 36" yazarsanız kemanda dataTables araması, bir sütunda şefi ve bir diğerinde 36 olduğu için 5'in bir productid'i olan satırı gösterecektir. doğru kod bu http://jsfiddle.net/Naka3/38/ gibi görünecekti.

$("#category").keyup(function() { 
    var selecteditem = $('#category').val(); 
    var kgrid = $("#grid").data("kendoGrid"); 
    selecteditem = selecteditem.toUpperCase(); 
    var selectedArray = selecteditem.split(" "); 
    if (selecteditem) { 
     //kgrid.dataSource.filter({ field: "UserName", operator: "eq", value: selecteditem }); 
     var orfilter = { logic: "or", filters: [] }; 
     var andfilter = { logic: "and", filters: [] }; 
     $.each(selectedArray, function (i, v) { 
      if (v.trim() == "") { 
      } 
      else { 
       $.each(selectedArray, function (i, v1) { 
        if (v1.trim() == "") { 
        } 
        else { 
         orfilter.filters.push({ field: "ProductName", operator: "contains", value:v1 }, 
               { field: "QuantityPerUnit", operator: "contains", value:v1}); 
         andfilter.filters.push(orfilter); 
         orfilter = { logic: "or", filters: [] }; 
        } 

       }); 
      } 
     }); 
     kgrid.dataSource.filter(andfilter); 
    } 
    else { 
     kgrid.dataSource.filter({}); 
    } 

}); 
İlgili konular