JqGrid getRowdata дает значение ячейки в строке в виде строки

У меня проблема с jqGrid 4.6.0. Когда я пытаюсь получить данные строки, они меняют все данные на строки, и мне нужно проанализировать их, чтобы получить действительные значения типа int или boolean. Странно то, что когда я вижу объект строки внутри пользовательского Форматирование строки данных кажется правильным

Вот пример кода и ссылка jsfiddle для примера, который я создал

  var myformatter = function (cellval, options, rowObject) 
  {
 // rowObject is correct here {id: 1, Name: "test1", IsActive: true, Count: 10}
     var active = rowObject.IsActive;// here active is true/false which is good
     var count = rowObject.Count; // here count is 10,20,30 which is good
     if(active )
     {
      // do what ever
     }
         return cellval;
   }
   var mydata = [
        {id:1, Name: "test1", IsActive: true, Count: 10},
        {id:2, Name: "test2", IsActive: false, Count: 20},
        {id:3, Name: "test2", IsActive: false, Count: 30} ];

        var grid = $("#list").jqGrid({

                datatype: "local",
                data: mydata,
                height: "auto",
              colNames: ['id', 'Name','Is Active','Count'],
                colModel :[
                    {name:'id', index:'id', width:55},
                    {name:'Name', index:'Name', width:90},
                    {name:'IsActive', index:'IsActive', width:90, editable: true ,formatter:myformatter},
                    {name:'Count', index:'Count', width:90, editable: true}

                ],
                pager: '#pager',
                rowNum:10,
                rowList:[10,20,30],
                sortname: 'idcustomers',
                sortorder: 'asc',
                viewrecords: true,
                gridview: true,
                caption: 'Customers',
                cellEdit: true,
                cellsubmit: 'clientArray',
                  });
var row = $('#list').jqGrid('getRowData', 1);

// row is: {id: "1", Name: "test1", IsActive: "true", Count: "10"}  
// What I was expecting {id: 1, Name: "test1", IsActive: true, Count: 10}

1 ответ

Решение

Вы должны использовать getLocalRow метод вместо getRowData чтобы решить вашу проблему. Важно понимать, что getRowData получить текст от <td> элемент. Таким образом, стандартный тип данных всегда строковый. Метод getLocalRow просто получить ссылку на внутренний элемент data массив с исходными данными.

Еще одно замечание: рекомендуется определять unformatter (unformat callback) форматер всегда, если определяется пользовательский форматер.

Видно, что вы используете редактирование данных. Стандартное редактирование изменит тип данных при модификации. Таким образом, у вас будет та же проблема, что и раньше. Бесплатная jqGrid позволяет решить проблему, указав convertOnSave обратный вызов для столбца. Смотрите вики- статью для более подробной информации. Дополнительно бесплатная jqGrid поддерживает некоторые стандартные шаблоны столбцов, что упрощает преобразование данных для логических, целых и числовых значений. На можно добавить template: "integer" недвижимость в Count столбец (см. определение шаблона здесь) и добавить template: "booleanCheckbox" (см. здесь). Вы можете отладить демо, например, и убедиться, что типы свойств data будет удерживаться правильно после редактирования.

Другие вопросы по тегам