JQGrid DatePicker фильтрации без нажатия клавиши Enter - PullRequest
6 голосов
/ 29 июля 2011

Я создаю свое первое приложение ASP.NET MVC 3 и использую jqGrid.Один из моих столбцов, «Flavor Created», является столбцом даты, и я хотел бы отфильтровать сетку для этого столбца, используя DatePicker.Вот что происходит в настоящее время: пользователь нажимает на поле фильтра заголовка столбца, отображается средство выбора даты, а затем пользователь выбирает год, месяц и щелкает день.Сборщик уходит и оставляет дату, скажем, 28.03.2009, в текстовом поле.Чтобы фактически заставить фильтр работать, я должен щелкнуть в этом поле и нажать клавишу Enter, что немного раздражает пользователя.

Существует ли способ автоматического запуска фильтра при нажатии пользователемэтот день?

(Кроме того, я не уверен, для чего используется кнопка «Готово», так как сборщик отключается при каждом нажатии на день. Возможно, это настройка, которую я пропускаю.)

Кому-нибудь еще нужна была эта функциональность и она была решена?

Я пытался сделать что-то вроде этого:

dataInit: function (elem) {
  $(elem).datepicker({ changeYear: true, changeMonth: true, showButtonPanel: true,
    onSelect: function (dateText, inst) {
       $("#icecreamgrid")[0].trigger("reloadGrid");
    }
  })
}

, как я видел, как кто-то на каком-то сайте предлагал, но это не сработало.

1 Ответ

16 голосов
/ 29 июля 2011

Вы можете попробовать с

dataInit: function (elem) {
    $(elem).datepicker({
        changeYear: true,
        changeMonth: true,
        showButtonPanel: true,
        onSelect: function() {
            if (this.id.substr(0, 3) === "gs_") {
                // in case of searching toolbar
                setTimeout(function(){
                    myGrid[0].triggerToolbar();
                }, 50);
            } else {
                // refresh the filter in case of
                // searching dialog
                $(this).trigger("change");
            }
        }    
    });
}

ОБНОВЛЕНО : Начиная с версии 4.3.3, jqGrid инициализирует DOM сетки как this из dataInit. Таким образом, не нужно использовать переменную myGrid в приведенном выше коде. Вместо этого можно использовать:

dataInit: function (elem) {
    var self = this; // save the reference to the grid
    $(elem).datepicker({
        changeYear: true,
        changeMonth: true,
        showButtonPanel: true,
        onSelect: function() {
            if (this.id.substr(0, 3) === "gs_") {
                // in case of searching toolbar
                setTimeout(function () {
                    self.triggerToolbar();
                }, 50);
            } else {
                // refresh the filter in case of
                // searching dialog
                $(this).trigger("change");
            }
        }    
    });
}

Бесплатные вызовы jqGrid со вторым параметром options, равным dataInit, который содержит дополнительную информацию, например свойство mode. Значение свойства mode равно "filter" в случае вызова внутри панели инструментов фильтра (и "search" в случае диалога поиска). Таким образом можно использовать следующий код

dataInit: function (elem, options) {
    var self = this; // save the reference to the grid
    $(elem).datepicker({
        changeYear: true,
        changeMonth: true,
        showButtonPanel: true,
        onSelect: function() {
            if (options.mode === "filter") {
                // in case of searching toolbar
                setTimeout(function () {
                    self.triggerToolbar();
                }, 0);
            } else {
                // refresh the filter in case of
                // searching dialog
                $(this).trigger("change");
            }
        }    
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...