最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Is it possible to get all jqGrid rows, across multiple pages, in the currently sorted order? - Stack Overflow

programmeradmin0浏览0评论

I'm using the latest version of jqGrid (v4.7.1). I have a grid which is populated with local data and has multiple pages of data. The user has sorted the data client-side. I would now like to retrieve all rows in their sorted order. Is it possible to do this?

Here's what I know:

var data = this.ui.grid.jqGrid('getGridParam', 'data');

This statement returns all rows in the grid, but returns them in their initial state. It is not affected by any sorting operation.

var rowData = this.ui.grid.jqGrid('getRowData');

This statement returns all rows in the current page, but does return them in the properly sorted order.

I was thinking about taking all the data and running it through the grid's sorting function, but that function is heavily guarded. I can get access to it by calling something like:

var data = this.ui.grid.jqGrid('getGridParam', 'data');
$.jgrid.from([])._doSort(data, 0)

However, this code still throws errors as jqGrid expects some other properties to have been set before calling _doSort. I'm confident I can get this working, but it feels like I'm hacking at some code in a really unintended fashion.

What are my options?

EDIT: This works, but it's pretty hacky:

var rowNum = this.ui.grid.getGridParam('rowNum');
this.ui.grid.setGridParam({ rowNum: 10000 }).trigger("reloadGrid");
var data = this.ui.grid.getRowData();
this.ui.grid.setGridParam({ rowNum: rowNum }).trigger("reloadGrid");

I'm using the latest version of jqGrid (v4.7.1). I have a grid which is populated with local data and has multiple pages of data. The user has sorted the data client-side. I would now like to retrieve all rows in their sorted order. Is it possible to do this?

Here's what I know:

var data = this.ui.grid.jqGrid('getGridParam', 'data');

This statement returns all rows in the grid, but returns them in their initial state. It is not affected by any sorting operation.

var rowData = this.ui.grid.jqGrid('getRowData');

This statement returns all rows in the current page, but does return them in the properly sorted order.

I was thinking about taking all the data and running it through the grid's sorting function, but that function is heavily guarded. I can get access to it by calling something like:

var data = this.ui.grid.jqGrid('getGridParam', 'data');
$.jgrid.from([])._doSort(data, 0)

However, this code still throws errors as jqGrid expects some other properties to have been set before calling _doSort. I'm confident I can get this working, but it feels like I'm hacking at some code in a really unintended fashion.

What are my options?

EDIT: This works, but it's pretty hacky:

var rowNum = this.ui.grid.getGridParam('rowNum');
this.ui.grid.setGridParam({ rowNum: 10000 }).trigger("reloadGrid");
var data = this.ui.grid.getRowData();
this.ui.grid.setGridParam({ rowNum: rowNum }).trigger("reloadGrid");
Share Improve this question edited Jan 9, 2015 at 20:08 Sean Anderson asked Jan 9, 2015 at 19:35 Sean AndersonSean Anderson 29.4k33 gold badges132 silver badges242 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 4

The class $.jgrid.from sill be used internally by jqGrid. The usage of of the methods is not documented. In general one should first create an object using $.jgrid.from: for example one can use

var data = $("#mygrid").jqGrid("getGridParam", "data");
var query = $.jgrid.from(data);

Then one should set some internal properties of the object, for example, make the later queries case insensitive

query = query.ignoreCase();

Then one can sort or filter the data. For sorting one should use

query.orderBy("columnNameByWhichOneSort",
    "a", // or "d" for "desc" sorting
    stype,  // sorttype from colModel oder "text"
    srcfmt, // typically ""
    sfunc); // typically null

To get the final results one should use

var queryResults = query.select();

I remend you to set some breakpoints inside of addLocalData and to debug the code. If you click on e column header the grid will be sorted you you will see how addLocalData uses $.jgrid.from internally.

Probably you can just to follow the answer instead and "subclass" $.jgrid.from. As the result you can get full results (all pages) based on the sorting and searching criteria of the user.

UPDATED: free jqGrid provides lastSelectedData option. See the demo in the list of demos.

发布评论

评论列表(0)

  1. 暂无评论