Das Filtern von Datums/Zeitangaben wird von kendoGrid standardmässig nicht komplett unterstützt. Genauer gesagt schlägt die Suche nach “ist gleich” fehl, da diese Prüfung auch die Uhrzeit mit einschliesst. Mit dem folgenden Code kann der Filter für Datumsspalten so überschrieben werden, dass auch Datums/Zeit-Spalten gefiltert werden können.

$('#grid').kendoGrid({
    // ...

    /**
     * Modify column filter for dateTime columns (not fully supported by kendo)
     *
     * @param e Event
     */
    filterMenuInit: function(e) {
        var _this = e;
        var filterWindow = $(_this.container);
        var grid = _this.sender;

        filterWindow.on('click', 'button[type=submit]', function(e) {
            // Gets filter type
            var filterType = filterWindow.find('select[data-role=dropdownlist]').eq(0).val();
            var datePicker = filterWindow.find('input[data-role=datepicker]');

            // If filter is 'Is equal to' and value is given by datePicker
            if (filterType === 'eq' && datePicker.length > 0) {
                e.preventDefault();

                //gets the datePicker input date
                var selectedDate = datePicker.eq(0).data('kendoDatePicker').value();
                var hasFilters = !!grid.dataSource.filter();
                var dateFilter = {
                    field: _this.field,
                    //create custom filter operator
                    operator: function(fieldDate) {
                        // Replace this with your own date comparison
                        return isSameDate(fieldDate, selectedDate);
                    },
                    value: kendo.toString(selectedDate, 'yyyy/MM/dd') // Kendo was really picky on this one. Only strings are supported.
                };

                // Determine if filters need to be extended
                if (hasFilters) {
                    var foundEntry = false;

                    // Check if filter is already part of filters
                    $.each(grid.dataSource._filter.filters, function(key, val) {
                        if (val.field === dateFilter.field) {
                            // Replace existing filter
                            grid.dataSource._filter.filters[key] = dateFilter;
                            foundEntry = true;
                        }
                    });

                    // If no existing filter found, add it
                    if (!foundEntry) {
                        grid.dataSource._filter.filters.push(dateFilter);
                    }

                    // Update grid to apply filter
                    grid.dataSource.fetch();

                } else {
                    grid.dataSource.filter(dateFilter);
                }

                //close filter window
                filterWindow.data('kendoPopup').close();
            }
        });
    }
});

 

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.