jqgrid filterToolbar не работает - PullRequest
       0

jqgrid filterToolbar не работает

1 голос
/ 25 августа 2011

Ну, я бьюсь головой об стену с этим, потому что я использовал jqgrid во многих приложениях, и подобный код работает в любом другом случае, но это!Вот код ...

var pfct = $("#pfc_table");
pfct.jqGrid({
        url: 'costs',
        datatype: 'json',
        'postData': JSON.stringify(getConds()),
        mtype: 'POST',
        colNames:['Id','Name','Formula','Conditions'],
        colModel :[
          {name:'id', index:'id', width:40, search:true},
          {name:'name', index:'name', width:130, search:true},
          {
              name:'formula', index:'formula',width:310, search:true,
              formatter : function(value, options, rData){
                  return value.substring(value.indexOf('=')+1);
              }
          },
          {name:'conditionstr', index:'conditionstr', width:160,search:true}
        ],
        jsonReader: {
            repeatitems:false,
            root: function (r) { return r.data.rows; },
            page: function (r) { return r.data.currpage; },
            total: function (r) { return r.data.totalpages; },
            records: function (r) { return r.data.totalrecords; }
        },
        gridComplete: function() {
        },
        gridview: true,
        height: 'auto',
        autowidth: true,
        pager: '#pfc_pager',
        rowNum:25,
        viewrecords: true,
        loadonce: true,
        ignoreCase: true,
        multiselect: false,
        pagination: true
});
pfct.navGrid('#pfc_pager',{edit:false,add:false,del:false,search:false,refresh:false});
pfct.jqGrid('filterToolbar',{stringResult: true,searchOnEnter: false});

Данные json, которые я отправляю, имеют несколько дополнительных свойств, которые не определены в colmodel, но это никогда не было проблемой в прошлом.Локальная сортировка и разбиение по страницам работает нормально, а фильтрация - нет!Для записи вот как выглядят данные:

{"data":{"totalpages":1,"currpage":1,"totalrecords":10,"rows":[{"name":"Test","id":18195,"level":0,"currency":"EUR","default":true,"formula":"f_18195()=110","ownerId":1,"categoryName":"Test cat","parentId":0,"rebate":0,"portDues":true,"modified":1310036286000,"conditionstr":"Condition 1, Condition 2"}],"userdata":null},"status":true,"responseError":null}

1 Ответ

1 голос
/ 26 августа 2011

Ваша исходная сетка имеет одну проблему.Вы используете пользовательский форматер для столбца формулы:

formatter : function(value, options, rData){
    return value.substring(value.indexOf('=')+1);
}

, поэтому данные "f_18195()=110" будут отображаться как "100".Способ хорошо работает в случае datatype: 'json' без loadonce: true, но работает неправильно в случае loadonce: true.Проблема в том, что данные, сохраненные локально для столбца formula, будут "f_18195()=110", а не "100".Поэтому во время фильтрации данных для фильтрации данных необходимо набрать «f» или «f_18195 () = 1» вместо «1»:

enter image description here

Вы можете исправитьпроблема, если бы вы использовали jsonmap как функцию:

jsonmap: function (obj) {
    var f = obj.formula;
    return f.substring(f.indexOf('=')+1);
}

вместо использования пользовательского форматера для столбца «формула».В случае, если значение «100» будет сохранено локально, а фильтрация данных работает должным образом:

enter image description here

См. Соответствующую демонстрацию здесь .

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