我遇到了jqGrid 4.6.0的问题 当我尝试获取行数据时,它将每个数据更改为字符串,我需要解析它们以获得实际的int或boolean值,奇怪的是,当我在自定义格式化程序中看到rowobject时,rowdata似乎是正确的
以下是我创建的示例的示例代码和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}
答案 0 :(得分:2)
您应该使用getLocalRow
方法而不是getRowData
来解决您的问题。了解getRowData
从<td>
元素获取文本非常重要。因此,标准类型的数据总是字符串。方法getLocalRow
只是使用原始数据获取data
数组的内部元素的引用。
还有一句话:如果定义了自定义格式化程序,建议定义unformatter(unformat
回调)格式化程序。
可以看到您使用的是数据编辑。标准编辑将更改修改时的数据类型。因此,您将遇到与以前相同的问题。免费的jqGrid允许通过为列指定convertOnSave
回调来解决问题。有关详细信息,请参阅the wiki文章。此外,免费的jqGrid支持一些标准列模板,这简化了布尔,整数和数字的数据转换。可以在template: "integer"
列中添加Count
属性(请参阅模板定义here)并添加template: "booleanCheckbox"
(请参阅here)。例如,您可以调试the demo并验证编辑后data
的属性类型是否可以正确保留。