Если я правильно вас понял, на странице появились элементы управления, создайте некоторые элементы управления, такие как input#from
и input#to
(<input>
поля с идентификаторами "от" и "до"), которые определяют интервал, на который вы отправляетесервер вместе с другими параметрами.
Я полагаю, что ваш код выглядит как
var $myGrid = $("#list"),
fromQueryString = "",
toQueryString = "",
createGrid = function () {
$myGrid.jqGrid({
postData: {
from: jQuery.parseDate(fromQueryString),
to: jQuery.parseDate(toQueryString)
},
url: "/Search.aspx/Find",
colNames: ['Test'],
colModel: [
{ name: 'Test', index: 'Test', sortable: false, width: 40 }
],
sortname: "Date",
sortorder: "desc",
jsonReader: { id: "ID" },
pager: "pagerControl",
caption: "Results"
});
},
myRefresh = function () {
var fromQueryString = $("#from").val(),
toQueryString = $("#to").val();
createGrid();
};
$("#from").change(myRefresh);
$("#from").change(myRefresh);
createGrid();
Проблема в том, что вышеуказанный код неправильный .createGrid
создает сетку только в первый раз, а затем (внутри myRefresh
) он просто ничего не дозирует после проверки того, что сетка $myGrid
уже создана.Это можно понять, если представить, что многие части сетки: заголовок, заголовки столбцов, пейджер и т. Д. Должны быть созданы только один раз .В следующий раз нужно просто перезагрузить содержимое тела сетки.
Правильный способ обновления jqGrid - это вызов .trigger("reloadGrid")
вместо попытки создания сетки, умноженной на несколько раз.Код можно исправить следующим образом:
var $myGrid = $("#list"),
fromQueryString = "",
toQueryString = "",
createGrid = function () {
$myGrid.jqGrid({
postData: {
from: function () {
return jQuery.parseDate($("#from").val());
},
to: function () {
jQuery.parseDate($("#to").val());
}
},
url: "/Search.aspx/Find",
colNames: ['Test'],
colModel: [
{ name: 'Test', index: 'Test', sortable: false, width: 40 }
],
sortname: "Date",
sortorder: "desc",
jsonReader: { id: "ID" },
pager: "pagerControl",
caption: "Results"
});
},
myRefresh = function () {
$myGrid.trigger("reloadGrid", [{page: 1}]);
};
$("#from").change(myRefresh);
$("#from").change(myRefresh);
createGrid();
В случае, если методы from
и to
из postData
будут вызываться при каждой перезагрузке сетки.Например, если пользователь щелкнет заголовок столбца, чтобы изменить сортировку сетки, или если пользователь решит отобразить другую страницу сетки.Вы можете прочитать здесь подробнее о подходе.
Единственное, что вы можете изменить дополнительно, это код serializeGridData
, который должен проверять свойства postData
и вызывать функцию, еслинеобходимо.Подробнее см. здесь .