I am trying to learn jqGrid. Using the following code, I could load data upon search button click. I searched many blogs and forum posts and found that datatype can be made as local
to avoid initial load. All those are working fine. But the parameter value passed to the server on the second search attempt is the same old value of the first search attempt. What is the missing part in my code below?
Following is the script
<script type="text/javascript">
$(document).ready(function () {
$('#txtLmiquidAmountFrom').val("800");
$('#txtLmiquidAmountTo').val("1200");
$("#grid").jqGrid({
url: "GamesList.aspx/GetMyGames",
mtype: 'POST',
postData:
{
gameSearch: $('#txtGameName').val() ,
ownerSearch: $('#txtOwner').val() ,
createdDateFrom: $('#txtCreatedFrom').val() ,
createdDateTo: $('#txtCreatedTo').val() ,
liquidAmountFrom: $('#txtLmiquidAmountFrom').val() ,
liquidAmountTo: $('#txtLmiquidAmountTo').val()
},
datatype: "local", //json if want to load initially
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
serializeGridData: function (postData) {
return JSON.stringify(postData);
},
jsonReader: {
repeatitems: false,
root: function (obj) { return obj.d; }
},
colNames: ['GameID', 'GameName', 'GameOwner', 'PlannedCloseDate', 'CreatedOnDate', 'GameLiquidAmount'],
colModel: [
{ name: 'GameID', index: 'GameID' },
{ name: 'GameName', index: 'GameName' },
{ name: 'GameOwner', index: 'GameOwner' },
{ name: 'PlannedCloseDate', index: 'PlannedCloseDate', formatter: 'date', formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' } },
{ name: 'CreatedOnDate', index: 'CreatedOnDate', formatter: 'date', formatoptions: { srcformat: 'm/d/Y', newformat: 'm/d/Y' } },
{ name: 'GameLiquidAmount', index: 'GameLiquidAmount' }
],
rowNum: 10,
/*rowList: [10, 20, 30],*/
pager: '#pager2',
sortname: 'id',
viewrecords: true,
sortorder: "desc",
caption: "Games",
gridview: true,
height: "auto",
loadonce: true,
recordtext: "Records {0} - {1} of {2}",
emptyrecords: "No records to view",
loadtext: "Loading...",
pgtext: "Page {0} of {1}"
});
$("#btnSearch").click(function (e)
{
$("#grid").jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
e.preventDefault();
});
});
</script>
HTML Markup
<div id="multiAccordion">
<h3><a style="font-size: 13px;">Search</a></h3>
<div>
<table class="app-search-table">
<tr>
<td class="app-search-description-td">Created From
</td>
<td>
<input id="txtCreatedFrom" type="text" />
</td>
<td class="app-search-description-td">Liquid Amount From
</td>
<td>
<input id="txtLmiquidAmountFrom" type="text" />
</td>
<td class="app-search-description-td">Owner
</td>
<td>
<input id="txtOwner" type="text" />
</td>
</tr>
<tr>
<td class="app-search-description-td">Created To
</td>
<td>
<input id="txtCreatedTo" type="text" />
</td>
<td class="app-search-description-td">Liquid Amount To
</td>
<td>
<input id="txtLmiquidAmountTo" type="text" />
</td>
<td class="app-search-description-td">Game Name
</td>
<td>
<input id="txtGameName" type="text" />
</td>
</tr>
<tr>
<td colspan="6" style="text-align: right;">
<button id="btnSearch" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" role="button">
<span class="ui-button-text">Search</span>
</button>
</td>
</tr>
</table>
</div>
<br />
<h3><a style="font-size: 13px;">Search Result</a></h3>
<div>
<table id="grid"></table>
<div id="pager2"></div>
</div>
</div>
UPDATE
Following two resolved it
- Making it dynamic by uisng
function
, as mentioned in the answer by @Oleg. - Complex version of
serializeGridData
as commented by @Oleg postData method not executing function