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.