2012-12-18 14 views
16

Sto cercando di creare una casella di ricerca per una griglia di kendoUI. Sono stato in grado di iniziare a fare una ricerca basata su un campo, tuttavia vorrei che il valore nella mia casella di ricerca ricerchi tutte le colonne della griglia.Cerca tutte le colonne nella griglia KendoUI

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

     } 

See js fiddle example

Ho provato ad utilizzare l'operatore OR logica qui: jsfiddle.net però io non riesco a farlo funzionare .... (vedo o pulsante di logica)

+0

Ho provato ad utilizzare l'operatore logico però che non funziona ... $ ("# griglia") dei dati ("kendoGrid") dataSource.filter ({ logica:.. "O", filtri: [ {field: "ProductName", operatore: "ne", valore: "fee"}, {field: "ProductName", operatore: "ne", valore: "fi"} ] }); – BlueBird

risposta

13

penso che dovresti dire eq a feeoeq a fi se vuoi abbinare una delle due condizioni.

Ho modificato leggermente il tuo fiddle per mostrarlo. Se digiti nella casella di ricerca, filtrerai i record corrispondenti alla colonna ProductName o allo QuantityPerUnit.

//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 
      } 
     ] 
    }); 
}); 

IMPORTANTE: Ho dovuto aggiornare la versione jQuery per 1.8.2 per farla funzionare e solo nel caso in cui ho aggiornato KendoUI, così, alla versione più recente.

4

Se non si desidera preoccuparsi dei nomi delle colonne, è possibile utilizzare questo codice. Funzionerà su qualsiasi griglia e cercherà tutte le colonne contrassegnate come filtrabili senza specificare i nomi delle colonne codificati. Inoltre, ho aggiunto ulteriori eventi in modo che se qualcuno dovesse copiare e incollare una query di ricerca, l'evento verrebbe chiamato. (Questo richiede anche jQuery 1.83 o superiore). Ho creato questo codice dopo essere passato dal plugin jQuery Datatables a Kendo UI Grid. Adoro Kendo ma ho davvero perso la casella di testo di ricerca globale offerta da DataTables. Includo questo codice su tutte le mie Kendo Grids.

 $("#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

Questo è esattamente quello che ho fatto, ma anche ora sto cercando di filtrare le colonne nascoste, che esistono solo nell'origine dati, quindi ora dovrò probabilmente passare a un altro approccio –

+0

Ottimo lavoro Mat. Voglio passare alla griglia UI di Kendo anche dalla griglia di Datatables, ma questa funzione di ricerca comune mi ha impedito di farlo in tutti questi giorni. Ora questo mi aiuta a passare completamente alla griglia dell'interfaccia utente di Kendo. grazie per il tuo lavoro –

4

La risposta di OnaBai non funziona come dataTable le tabelle di dati trattano gli spazi come e attraverso i campi. Nel violino se si digita "chef 36" non viene mostrato alcun dato. La ricerca dei parametri mostra la riga che ha un productid di 5 poiché ha chef in una colonna e 36 in un'altra. il codice corretto sarebbe simile a questo http://jsfiddle.net/Naka3/38/.

$("#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({}); 
    } 

}); 
Problemi correlati