I'm using a jqGrid to display orders in my project with the below code, when I try to refresh using the refresh button on the grid, the formatter for column status i.e. function dropdownFormatter() has the rowObject variable as undefined.
Due to this when I'm trying an auto-reload function, the dropdowns, don't get populated with the proper parameter. This problem is solved if I set the jqGrid property "loadonce" as false.
But if the "loadonce" property is set as false, the dropdown select simply does not filter the grid.
jQuery("#list").jqGrid({
url:'http://192.168.0.7:8000/orders_get_open',
datatype: "json",
colNames:['Id','Order No','Address', 'Pincode', 'Phone Number', "Pickup Date", "Pickup Time", "Delivery Date", "Delivery Time", "Status", "Delivery Boys", "Actions"],
colModel:[
{name: 'order_id', index: 'order_id', hidden: true},
{name: 'order_no', index: 'order_no', width: 130},
{name: 'user_address',index: 'user_address', width: 400, search: false},
{name: 'pincode',index: 'pincode', width: 110, search: false},
{name: 'user_phone_number',index: 'user_phone_number', width: 180, search: false},
{name: 'pickup_date', index: 'pickup_date'},
{name: 'pickup_time', index: 'pickup_time'},
{name: 'delivery_date', index: 'delivery_date', width: 170},
{name: 'delivery_time', index: 'delivery_time', width: 170},
{
name: 'status', index: 'status', formatter: statusFormatter, stype: 'select', searchoptions: {
sopt: ['eq'], value: ':All;ordered:Ordered;received:Received;laundry_entry:Laundry Entry;laundry_exit:Laundry Exit;delivered:Delivered'
}
},
{name: 'delivery_boys', index: 'delivery_boys', formatter: dropdownFormatter, search: false},
{name: '', index:'', formatter: actionFormatter, search: false}
],
width: "1300",
height: "auto",
cache: false,
rowNum:10,
rowList:[10,20,30],
pager: '#pager',
loadonce: true,
sortname: 'id',
viewrecords: true,
sortable: true,
sortname: "order_no",
sortorder: "asc",
caption:"Order Details",
}).jqGrid('navGrid','#pager', {
edit:false,add:false,del:false, search: false, refresh: true
}).jqGrid('filterToolbar', {
stringResult: true, searchOnEnter: false, defaultSearch: "cn"
});
function dropdownFormatter(cellValue, options, rowObject) {
console.info(cellValue, options, rowObject);
console.log(rowObject.delivery_boy_id);
var control = "<select class='form-control'><option value>Select</option>";
$.each(cellValue, function (idx, obj){
if (obj.id == rowObject.delivery_boy_id) {
control += "<option value='" + obj.id + "' selected='selected'>" + obj.name + "</option>";
} else {
control += "<option value='" + obj.id + "'>" + obj.name + "</option>";
}
});
control += "</select>";
return control;
}
Sample data: https://api.myjson.com/bins/22vo1
jsfiddle for the code: http://jsfiddle.net/76588Lev/1/