2012-12-18 15 views
16

Ich versuche, ein Suchfeld für ein KendoUI-Gitter zu erstellen. Ich konnte eine Suche starten, die auf einem Feld basiert, aber ich möchte, dass der Wert in meinem Suchfeld alle Spalten im Gitter durchsucht.Suche alle Spalten in KendoUI Grid

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

     } 

See js fiddle example

Ich versuchte, den oder Logik-Operator hier: jsfiddle.net aber ich kann nicht scheinen, um es zu arbeiten .... (siehe oder Logik-Taste)

+0

Ich habe versucht, die Logik-Operator jedoch funktioniert es nicht ... $ ("# grid") Daten ("kendoGrid") dataSource.filter ({ Logik:.. "Oder", Filter: [ {Feld: "ProductName", Operator: "ne", Wert: "Gebühr"}, {Feld: "ProductName", Operator: "ne", Wert: "fi"} ] }); – BlueBird

Antwort

13

Ich denke, dass Sie sollten eq zu feeodereq zu fi sagen, wenn Sie eine der beiden Bedingungen übereinstimmen möchten.

Ich habe Ihre fiddle leicht modifiziert, um es zu zeigen. Wenn Sie das Suchfeld eingeben, filtern Sie Datensätze, die entweder ProductName Spalte oder QuantityPerUnit entsprechen.

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

WICHTIG: Ich habe jQuery-Version 1.8.2 für die es Arbeit zu aktualisieren und für den Fall, ich habe KendoUI aktualisiert, als auch, auf die neueste Version.

4

Wenn Sie sich nicht um Spaltennamen kümmern müssen, können Sie stattdessen diesen Code verwenden. Es funktioniert in jedem Raster und durchsucht alle Spalten, die als filterbar gekennzeichnet sind, ohne fest codierte Spaltennamen. Außerdem fügte ich zusätzliche Ereignisse hinzu, so dass, wenn jemand eine Suchabfrage kopieren und einfügen würde, das Ereignis aufgerufen würde. (Dies erfordert auch jQuery 1.83 oder höher). Ich habe diesen Code erstellt, nachdem ich vom jQuery Datatables-Plugin zum Kendo UI-Grid gewechselt habe. Ich liebe Kendo, habe aber die von DataTables angebotene globale Suchbox wirklich vermisst. Ich füge diesen Code allen meinen Kendo Grids bei.

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

Genau das habe ich gemacht, aber jetzt versuche ich auch verdeckte Spalten zu filtern, die nur in der Datenquelle existieren, also werde ich wahrscheinlich zu einem anderen Ansatz wechseln müssen –

+0

Tolle Arbeitsmatte .. Ich möchte zum Kendo UI-Raster wechseln ebenso von Datatables grid, aber diese gemeinsame Suchfunktion hielt mich davon ab, dies in all diesen Tagen zu tun. Jetzt hilft mir dies, vollständig zum Kendo UI-Gitter zu gelangen. Danke für deine Arbeit –

4

OnaBai's Antwort funktioniert nicht wie Datentables behandelt Datentabellen Räume als und über Felder. In der Fiedel, wenn Sie "Chef 36" eingeben, zeigt es keine Ergebnisse dataTables Suche würde die Zeile zeigen, die eine productid von 5 hat, da es Chef in einer Spalte und die 36 in einem anderen hat. der richtige Code würde so aussehen 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({}); 
    } 

}); 
Verwandte Themen