We are using virtual scrolling.
We are calling our custom method every second and get the updated row data to create a list array. At the last call updateRow method to update all rows in the grid.
$("#gridfilter1").pqGrid("updateRow", {
rowList: lArrRowUpdate (Array list to update multiple rows)
});
My grid object details are as below:
$(function () {
var pqVS = {
rpp: 35, //records per page.
init: function () {
this.totalRecords = 0;
this.requestPage = 1; //begins from 1.
this.data = [];
}
};
pqVS.init();
var obj =
{
width: "auto",
numberCell: { width: 30, show: false },
//title: "Virtual Scrolling",
resizable: true,
filterModel: { header: false, type: 'remote', menuIcon: true },
menuIcon: true,
//sortModel: { type: 'remote', sorter: [{ dataIndx: 'inRowIndex', dir: 'up' }] },
sortModel: { type: 'remote' },
selectionModel: { type: 'row', mode: 'block' },
editable: false,
beforeSort: function (evt) {
if (evt.originalEvent) {//only if sorting done through header cell click.
pqVS.init();
}
},
dragModel: {
on: true,
diDrag: "inRowIndex"
},
dropModel: {
on: true
},
beforeFilter: function () {
pqVS.init();
},
beforeTableView: function (evt, ui) {
var initV = ui.initV,
finalV = ui.finalV,
data = pqVS.data,
rpp = pqVS.rpp,
requestPage;
if (initV != null) {
//if records to be displayed in viewport are not present in local cache,
//then fetch them from remote database/server.
if (data[initV] && data[initV].pq_empty) {
requestPage = Math.floor(initV / rpp) + 1;
}
else if (data[finalV] && data[finalV].pq_empty) {
requestPage = Math.floor(finalV / rpp) + 1;
}
if (requestPage >= 1) {
if (pqVS.requestPage != requestPage) {
pqVS.requestPage = requestPage;
//initiate remote request.
this.refreshDataAndView();
this.hideLoading();
}
}
}
},
colModel: fsTableHeaders,
rowInit: function (ui) {
},
cellSave: function (evt, ui) {
this.refreshRow({ rowIndx: ui.rowIndx });
},
create: function () {
var lsParamQueryGridState = $("#hfParamQueryGridState1").val();
if (lsParamQueryGridState != "")
$("#gridfilter1").pqGrid("loadState", { state: lsParamQueryGridState, refresh: true });
},
};
obj.dataModel =
{
method: "GET",
dataType: "JSON",
location: "remote",
url: "MY URL",
postData: function () {
//debugger;
return {
pq_curpage: pqVS.requestPage,
pq_rpp: pqVS.rpp,
pq_type: fiType,
pq_group_id: liGroupID,
pq_strategy_uid: lsStrategyUID,
pq_column_list: fsColumnList,
};
},
getData: function (response) {
var data = response.data,
totalRecords = response.totalRecords,
len = data.length,
curPage = response.curPage,
pq_data = pqVS.data,
init = (curPage - 1) * pqVS.rpp;
if (!pqVS.totalRecords) {
//first time initialize the rows.
for (var i = len; i < totalRecords; i++) {
pq_data[i + init] = { pq_empty: true };
}
pqVS.totalRecords = totalRecords;
}
for (var i = 0; i < len; i++) {
pq_data[i + init] = data[i];
pq_data[i + init].pq_empty = false;
}
return { data: pq_data }
},
error: function (jqXHR, textStatus, errorThrown) {
//alert(errorThrown);
}
};
var grid = $("#gridfilter1").pqGrid(obj,
{
//cellKeyDown: function (evt, ui)
//{
// var sr = this.SelectRow();
// var currentIndx = ui.rowIndx;
// if (evt.keyCode == $.ui.keyCode.DOWN) {
// if (currentIndx + 1 >= this.getData().length) {
// return;
// }
// sr.removeAll();
// sr.add({ rowIndx: ui.rowIndx + 1 });
// } else if (evt.keyCode == $.ui.keyCode.UP) {
// if (currentIndx == 0) {
// return;
// }
// sr.removeAll();
// sr.add({ rowIndx: ui.rowIndx - 1 });
// }
//},
beforeCellKeyDown: function (event, ui) {
if (event.ctrlKey && event.key == "F1") {
console.log("ctrlKey + F1");
event.preventDefault();
}
else if (event.key == "Delete") {
return false; //to prevent default behaviour.
}
else if (event.key == "F1" || event.key == "+") {
console.log(this.SelectRow().getSelection());
event.preventDefault();
}
else if (event.key == "F2" || event.key == "-") {
console.log(this.SelectRow().getSelection());
event.preventDefault();
}
else if (event.key == "F3") {
console.log(this.SelectRow().getSelection());
event.preventDefault();
}
else if (event.key == "F5") {
console.log(this.SelectRow().getSelection());
event.preventDefault();
}
},
});
});