I am using jqgrid in 'multiselect' mode and without pagination. When the user selects individual records by using mouse click, is there any way that I can bring those selected records to the top of the grid?
Thanks in advance for your help.
I am using jqgrid in 'multiselect' mode and without pagination. When the user selects individual records by using mouse click, is there any way that I can bring those selected records to the top of the grid?
Thanks in advance for your help.
After small discussion with you in comments I could reformulate your question so: "how one can implement sorting by multiselect column?"
The question find is very interesting so I invested some time and could suggest a solution in case of jqGrid which hold local data (datatype
which is not 'xml' or 'json' or which has 'loadonce: true' option).
First of all the working demo which demonstrate my suggestion you can find here:
The implementation consist from two parts:
To implement of holding selection I suggest to extend local data
parameter, which hold local data with the new boolean property cb
(exactly the same name like the name of the multiselect column). Below you find the implementation:
multiselect: true,
onSelectRow: function (id) {
var p = this.p, item = p.data[p._index[id]];
if (typeof (item.cb) === "undefined") {
item.cb = true;
} else {
item.cb = !item.cb;
}
},
loadComplete: function () {
var p = this.p, data = p.data, item, $this = $(this), index = p._index, rowid;
for (rowid in index) {
if (index.hasOwnProperty(rowid)) {
item = data[index[rowid]];
if (typeof (item.cb) === "boolean" && item.cb) {
$this.jqGrid('setSelection', rowid, false);
}
}
}
}
To make 'cb' column (multiselect column) sortable I suggest to do following:
var $grid = $("#list");
// ... create the grid
$("#cb_" + $grid[0].id).hide();
$("#jqgh_" + $grid[0].id + "_cb").addClass("ui-jqgrid-sortable");
cbColModel = $grid.jqGrid('getColProp', 'cb');
cbColModel.sortable = true;
cbColModel.sorttype = function (value, item) {
return typeof (item.cb) === "boolean" && item.cb ? 1 : 0;
};
UPDATED: The demo contain a little improved code based on the same idea.
$grid.jqGrid('getColParam', 'colModel');
one can get the reference to colModel
parameter. Using $grid.jqGrid('getColProp', columnName)
one can get the reference to one item from the colModel
. $grid.jqGrid('setColProp', columnName, modExt)
will get the the reference to one item from the colModel
and then call $.extend
which will merge property of modExt
with properties of the column. The last line (setting sorttype
as function) defines custom sorting which is important to understand in many other situations. –
Lemons var grid = jQuery("#list2");var ids = grid.jqGrid('getGridParam', 'selarrrow');
. This only provides current page selection on clicking add(external) button. –
Dynah idsOfSelectedRows
variable to hold the array of selected rows. If you have more as one grid on the page you can easy modify the code to hold idsOfSelectedRows
as the option of jqGrid so that you could use it in the same way as selarrrow
. –
Lemons idsOfSelectedRows
variable may not be available in external JS function. –
Dynah idsOfSelectedRows
as new custom option of jqGrid. In the case one can easy use it in the same way like standard jqGrid options (selarrrow
). It's probably better if you ask new question where you describe your problem in details. I'll answer it. The questions asked in the comments will be not found during searching on the page, so they will have less value for other readers. –
Lemons If you have the IDs of the row(s) you can do a special sort on server side by using following command for e.g. MySQL:
Select a,b,c
FROM t
ORDER BY FIND_IN_SET(yourColumnName, "5,10,44,29") DESC
or
ORDER BY FIELD(yourColumnName, "5") DESC
© 2022 - 2024 — McMap. All rights reserved.