I blogged a while back on shortcoming of getRowData function of jqGrid in edit mode. I also recently ran into an issue when getRowData was returning blank for a cell that contains select (dropdown) control in edit mode. So, I wrote a quick function that I wanted to post here to help others that handles both situations (the best it can in the case of a blank).
window.jqHelpers = window.jqHelpers || { parseValueFromJQGridCell: function (celValueReturndByGetRowData, columnName, handleBlanks) { var controlNameToLookFor = new RegExp("id=".+_" + columnName, "ig"); var finalValue = celValueReturndByGetRowData; if (celValueReturndByGetRowData.toLowerCase().indexOf('<input') >= 0 || celValueReturndByGetRowData.toLowerCase().indexOf('<select') >= 0) { var matched = finalValue.match(controlNameToLookFor)[0]; var rowIndex = matched.toUpperCase().replace("ID="", "").replace("_" + columnName.toUpperCase(), ""); finalValue = $('#' + rowIndex + '_' + columnName).val(); }; if (!finalValue && handleBlanks) { var inputControl = $('input[id*=' + columnName); if (inputControl.length) { finalValue = inputControl.val(); } } if (!finalValue && handleBlanks) { var selectControl = $('select[id*=' + columnName); if (selectControl.length) { finalValue = selectControl.val(); } } return finalValue; } }
The idea is that after you call getRowData, you would run through the returned array and only for columns that are editable call the function, such as
oneRow[‘ColumnName’] = jqHelpers.parseValueFromJQGridCell(oneRow[‘ColumnName’], ‘ColumnName’, true);
Enjoy.