2017-12-04 3 views
1

Ich versuche, den Filterwert eines benutzerdefinierten Kendo Grid-Filters programmgesteuert festzulegen. Ich meine neue Filterwerte wie die Anwendung:Kendo Grid Benutzerdefiniertes Filter Set Filterwert programmgesteuert

gridOptions.dataSource.filter = [ 
    { 
     field: 'MyField', 
     operator: 'eq', 
     value: newTextValue 
    } 
]; 

Mein Felddefinition in den Rasteroptionen wie folgt aussehen:

{ 
    width: '140px', 
    title: 'MyFieldTitle', 
    field: 'MyField', 
    filterable: getFieldFilter() 
} 

Mit folgendem Filter:

function getFieldFilter() { 
    return { 
    cell: { 
     template: function (args) { 
     var element = args.element; 

     element.kendoComboBox({ 
      dataSource: { 
      transport: { 
       read: 'api/Items' 
      } 
      }, 
      valuePrimitive: true, 
      dataTextField: 'Description', 
      dataValueField: 'Code' 
     }); 
     }, 
     showOperators: false 
    } 
    }; 
} 

Wenn ich die Anwendung Filter wie oben gezeigt, es funktioniert nur, nachdem ich auf die KendoComboBox in der Spalte geklickt habe und außerhalb von ihr erneut klicke. Mein erster Gedanke war, dass Kendo Grid nicht die dataValueField anwenden und nur dataTextField setzen würde. Als ich die Anfragen, die Kendo Grid an den Server sendet, überprüfte, sah ich, dass es an den in der KendoComboBox gespeicherten Wert (Text) und nicht an den dahinter liegenden Wert sendete.

Wenn ich etwas in der KendoComboBox von der Benutzeroberfläche auswählen, funktioniert alles gut. Aber wenn ich es programmatisch wie oben eingestellt habe, tut es das nicht.

Muss ich eine Art von Status aktualisieren, damit die kendoComboBox ihren internen Wert aktualisiert oder wie behebe ich dieses Problem?

EDIT: Was ich versuche zu tun, wird immer den Wert der kendoCombobox vom Netz.

var currentlyAppliedFilters = grid.dataSource.filter().filters; 
for (var filter of currentlyAppliedFilters) { 
    if (filter.field === 'MyField') { 
     var currentlyApplied = filter.value; 
    } 
} 

So über den Code, würde sie das Description Eigentum der Elemente in den kendoCombobox, aber was ich eigentlich will ihm die Code Eigenschaft erhalten.

Antwort

0

Wenn die dataSource zunächst keinen Filter hat, benötigt der Zellfilter eine Optionsbezeichnung. damit der 1. Wert nicht wie ausgewählt erscheint.

zB: dojo example with optionLabel

args.element.kendoDropDownList({ 
           dataSource: args.dataSource, 
           optionLabel: "Select a color...", 
           dataTextField: "color", 
           dataValueField: "color", 
           valuePrimitive: true 
          }); 

, wenn Sie benötigen Sie das Raster zu filtern, wenn die Bindung sollte ein Standardfilter auf die

zB Datasource hinzugefügt werden: diese dojo example with DataSource Filter

dataSource: { 
      data:[ { color: "#ff0000", size: 30 }, { color: "#000000", size: 33 }] , 
      filter: { field: "color", operator: "eq", value: "#ff0000" } 
        } 

Hoffnung hilft.

+0

In meinem Fall scheint es anders zu sein, entweder weil ich ein anderes 'dataTextField' und' dataValueField' verwende oder weil ich eine 'kendoDropDownList' mit Texteingabe habe. –

Verwandte Themen