jqGrid фильтр или поиск по дате не работает на стороне клиента - PullRequest
7 голосов
/ 21 января 2011

У меня есть страница ASP.NET MVC 3. На нем у меня есть таблица, которую я превращаю в jqGrid, используя данные JSON из вызова ajax. Сетка имеет следующую настройку:

myGrid = $('#myGrid');
myGrid.jqGrid({
    caption: 'My Grid',
    datatype: 'local',
    data: data.rows,
    height: 250,
    pager: '#myPager',
    viewrecords: true,
    colModel: [
        ...,
        {
            label: 'blah',
            name: 'blah',
            align: 'left',
            sortable: true,
            editable: false,
            width: 85,
            formatter: 'date',
            sorttype: 'date',
            datefmt: 'm/d/Y',
            formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' }
        },
        ...
    ]
});

// turn on filter toolbar
myGrid.filterToolbar();

data.rows возвращается из вызова ajax. Это работает во всех отношениях, кроме одного. Я могу разбивать на страницы на стороне клиента, сортировать на стороне клиента и выполнять поиск по каждому полю, кроме того, для которого я показываю colModel. Это «бла» поле является полем даты и правильно отображает даты в формате мм / дд / гггг. Однако, когда я набираю что-то вроде 17.11.2010 на панели инструментов и нажимаю ввод, поиск возвращает 0 записей.

Итак, я углубился в код jqGrid, и вот что он генерирует перед поиском:

{"groupOp":"AND","rules":[{"field":"blah","op":"bw","data":"11/17/2010"}]}

В конце концов, когда он проходит через каждую строку и оценивает операцию над полем, строка eval (m) && p.push (this), m это:

(String(this.blah).substr(0,10) == String("11/17/2010"))

По сути, мне кажется, что он не признает, что поле является датой. Он вызывает parse вместо parseDate. У кого-нибудь есть идеи, как это исправить? Я знаю, что поиск на стороне сервера очень прост, я могу просто пропустить эту строку, разобрать ее и bam. Но я бы хотел остаться на стороне клиента, если смогу. Мне удалось продублировать это в некоторых примерах, которые поставили Олег и Том, так что это либо проблема, либо я что-то упустил в конфигурации ...

1 Ответ

3 голосов
/ 22 января 2011

Мне интересен ваш вопрос, поэтому +1 от меня к вашему вопросу.Поскольку вы разместили строку

(String(this.blah).substr(0,10) == String("11/17/2010"))

, использованную в eval во время локального поиска, я полагаю, вы потратили много времени, чтобы понять, как реализован локальный поиск.Поскольку вы видите, что строка выше (см. (String(this.blah).substr(0,10) ...) - это не то, что должно быть сделано (значение String(this.blah) будет «2010-11-17» вместо «17.11.2010»), вы можете перезаписатьсоответствующую функцию jqGrid (функция _getStr внутри $.jgrid.from) и устранение проблемы следующим образом.

Некоторое время назад я трачу много времени на подготовку соответствующей демонстрации ,который демонстрирует эту технику.Демо было подготовлено как ответ на форуме trirand .В вопросе кто-то хотел найти строки типа 'bénevise' в случае поиска 'benevise'.Таким образом, нужно реализовать действительно индивидуальный локальный поиск.Я надеюсь, что этой информации вам будет достаточно, чтобы решить проблему, которую вы описываете.

ОБНОВЛЕНО : Мне кажется, я нашел гораздо более простой обходной путь.Вы должны просто определить searchoptions: {sopt: ['eq','ne']} для столбца 'blah', содержащего данные.Тогда "bw" (начало) не будет использоваться для столбца.Операции «равно» и «не равно» работают правильно при локальном поиске.

ОБНОВЛЕНО 2 : Здесь - это рабочий пример, в котором я использую sopt опция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...