Slimshadddyyy Slimshadddyyy - 1 year ago 219
Javascript Question

jqGrid get multiple selected row cells value

My jqGrid Script:

datatype: "json",
height: 'auto',
rowNum: 20,
rowList: [20,30],
colNames:['ID','RESOURCE','ROLE','SITE', 'ALLOC. TYPE', 'UNIT (%)','HOURS'],
{name:'ID',key:true,index:'ID', width:50, align:'center',search:false,hidden: true},
{name:'RESOURCE',index:'RESOURCE', width:150, sorttype:"text",align:'center',search:true},
{name:'ROLE',index:'ROLE',width:120 ,align:'center',search:false},
{name:'SITE',index:'SITE', width:120, align:'center',search:false},
{name:'ALLOC. TYPE',index:'ALLOCATION_TYPE', align:'center',width:120,search:false },
{name:'HOURS',index:'HOURS', search:false, align:'center',sortable:false,editable:true}
pager: "#page",
shrinkToFit :true,
autowidth: true,
viewrecords: true,
sortname: 'RESOURCE',
sortorder: "asc",
multiselect: true,
cellEdit: true,
cellsubmit : 'clientArray',
caption: "Resource List"
}).navGrid('#page',{ edit:true,add:false,del:false,search:false,cloneToTop:true,refresh:false},

//add options


//msg: "do you really want delete this keyword? This delete affect on Eqms filter"


jQuery("#task-grid").jqGrid('filterToolbar', { autosearch: true });
var topPagerDiv = $('#grid_toppager')[0];
jQuery("#grid_toppager_center", topPagerDiv).remove();

Below function is appending
value to in hidden input

var Ids = jQuery("#task-grid").jqGrid('getGridParam','selarrrow');
var empIds = $("input[type=hidden][name=user_id]").val(Ids);

Hidden Input

<input type="hidden" name="user_id" value=""/>

Now I need to fetch the cell value inserted and for that I am using below function

var myGrid = $('#task-grid'),
selRowId = myGrid.jqGrid ('getGridParam', 'selrow'),
celValue = myGrid.jqGrid ('getCell', selRowId, 'HOURS');

The console log does show me the
selected but not its corresponding cell value. Also I am able to pass multiple
checked in hidden input but not able to do for cell value.


Answer Source

First of all jQuery("#task-grid").jqGrid('getGridParam','selarrrow'); returns array of items. You can't assign the array as the value of some <input>. You can use comma separated list of items instead: .val(Ids.join(",")) or you can use JSON.stringify alternatively. .val(JSON.stringify(Ids)).

To place values from some columns instead of ids you can define first an empty array and then fill it with the required values using push method. At the end you can use .join(",") or JSON.stringify to convert the array of items to the string which you can assign to <input>

var $grid = $("#task-grid"), selIds = $grid.jqGrid("getGridParam", "selarrrow"), i, n,
    cellValues = [];
for (i = 0, n = selIds.length; i < n; i++) {
    cellValues.push($grid.jqGrid("getCell", selIds[i], "HOURS"));

I recommend you additionally to use gridview: true option in the grid to improve the performance and to fix name:'ALLOC. TYPE'. If you need to read some exotic formatted input elements the you should use jsonmap, but to hold the name property so that it have no spaces, dots and other meta-characters. I recommend you to use all index the same as the name. In the case you can remove index properties at all from colModel. If you use mostly align:'center', search:false then I recommend you to change defaults for colModel items by usage cmTemplate: {align: 'center', search: false}. It allows you to remove many properties from colModel and makes it more readable and better to maintain.