如何在 jQgrid 中对行进行排序后获取新的行顺序?
How to get the new row order after sort rows in jQgrid?
我有以下网格定义:
$(document).ready(function () {
$("#thegrid").jqGrid({
url: "/ajax/questions/get/" + form_id,
datatype: "json",
colNames: ['id', 'grid_id', 'seq', 'type', 'text'],
colModel: [
{name: 'field_id', index: 'id', width: 100, editable: false, search: false},
{name: 'grid_id', index: 'grid_id', width: 50, editable: false, search: false},
{name: 'field_seq', index: 'seq', width: 45, editable: false, search: false},
{name: 'type', index: 'type', width: 125, editable: false, search: false},
{name: 'field_name', index: 'text', width: 585, search: false}
],
autowidth: true,
rowNum: 200,
cmTemplate: {width: 300, autoResizable: true},
iconSet: "fontAwesome",
guiStyle: "bootstrap",
autoResizing: {compact: true, resetWidthOrg: true},
viewrecords: true,
autoencode: true,
sortable: true,
pager: true,
toppager: true,
hoverrows: true,
multiselect: true,
multiPageSelection: false,
rownumbers: true,
loadonce: true,
autoresizeOnLoad: true,
forceClientSorting: true,
ignoreCase: true,
prmNames: {id: "field_id"},
jsonReader: {id: "field_id"},
localReader: {id: "field_id"},
navOptions: {edit: false, add: false, search: false, del: false, refresh: true},
pgbuttons: false,
pginput: false,
caption: "Questions",
height: 100,
editurl: '/ajax/questions/edit',
onSelectRow:
function () {
// ....
},
loadComplete: function () {
// ...
}
})
});
使用上面的代码,可以通过将行拖放到网格中的某个位置来对行进行排序。
为了保持这种变化,我在后端有一个函数,它接受一个 form_id
(我把它存储在 sessionStorage 中)和一个 field_id => field_seq
的数组,并在数据库级别做一些魔术.
看下图是第一次加载的网格:
现在假设我将彩色行 (id: 219110
) 拖放到第一行位置。这将使第一行 (id: 219110
) 向下移动一行(之后的所有行都会发生同样的情况),然后移动的行将占据第一个位置。请参阅下面的示例:
之前:
+--------+--------+-----+
| id | gri_id | seq |
+--------+--------+-----+
| 219111 | | 1 |
| ... | | ... |
| 219110 | | 4 |
+--------+--------+-----+
之后:
+--------+--------+-----+
| id | gri_id | seq |
+--------+--------+-----+
| 219110 | | 1 |
| 219111 | | 2 |
| ... | | ... |
+--------+--------+-----+
我需要使用 id
作为 key
和 seq
作为值来构建和排列,以便稍后将其传递给 AJAX 后端将关心存储新数据的函数。
我该如何实现?
您可以使用 jqGrid 的 lastSelectedData
参数来获取用户先前排序和过滤的项目。老答案:this one and 提供了demo,演示了lastSelectedData
.
的用法
一般来说,jqGrid内部包含一些JavaScript方法,用于本地数据的排序和过滤。我在 the old answer tricky technique, which works on old jqGrid (i version <=4.7). Already in the first version of "free jqGrid" fork I implemented lastSelectedData
parameter (see the readme) 中进行了描述,这使得处理最后排序和过滤的本地数据变得非常容易。
我有以下网格定义:
$(document).ready(function () {
$("#thegrid").jqGrid({
url: "/ajax/questions/get/" + form_id,
datatype: "json",
colNames: ['id', 'grid_id', 'seq', 'type', 'text'],
colModel: [
{name: 'field_id', index: 'id', width: 100, editable: false, search: false},
{name: 'grid_id', index: 'grid_id', width: 50, editable: false, search: false},
{name: 'field_seq', index: 'seq', width: 45, editable: false, search: false},
{name: 'type', index: 'type', width: 125, editable: false, search: false},
{name: 'field_name', index: 'text', width: 585, search: false}
],
autowidth: true,
rowNum: 200,
cmTemplate: {width: 300, autoResizable: true},
iconSet: "fontAwesome",
guiStyle: "bootstrap",
autoResizing: {compact: true, resetWidthOrg: true},
viewrecords: true,
autoencode: true,
sortable: true,
pager: true,
toppager: true,
hoverrows: true,
multiselect: true,
multiPageSelection: false,
rownumbers: true,
loadonce: true,
autoresizeOnLoad: true,
forceClientSorting: true,
ignoreCase: true,
prmNames: {id: "field_id"},
jsonReader: {id: "field_id"},
localReader: {id: "field_id"},
navOptions: {edit: false, add: false, search: false, del: false, refresh: true},
pgbuttons: false,
pginput: false,
caption: "Questions",
height: 100,
editurl: '/ajax/questions/edit',
onSelectRow:
function () {
// ....
},
loadComplete: function () {
// ...
}
})
});
使用上面的代码,可以通过将行拖放到网格中的某个位置来对行进行排序。
为了保持这种变化,我在后端有一个函数,它接受一个 form_id
(我把它存储在 sessionStorage 中)和一个 field_id => field_seq
的数组,并在数据库级别做一些魔术.
看下图是第一次加载的网格:
现在假设我将彩色行 (id: 219110
) 拖放到第一行位置。这将使第一行 (id: 219110
) 向下移动一行(之后的所有行都会发生同样的情况),然后移动的行将占据第一个位置。请参阅下面的示例:
之前:
+--------+--------+-----+
| id | gri_id | seq |
+--------+--------+-----+
| 219111 | | 1 |
| ... | | ... |
| 219110 | | 4 |
+--------+--------+-----+
之后:
+--------+--------+-----+
| id | gri_id | seq |
+--------+--------+-----+
| 219110 | | 1 |
| 219111 | | 2 |
| ... | | ... |
+--------+--------+-----+
我需要使用 id
作为 key
和 seq
作为值来构建和排列,以便稍后将其传递给 AJAX 后端将关心存储新数据的函数。
我该如何实现?
您可以使用 jqGrid 的 lastSelectedData
参数来获取用户先前排序和过滤的项目。老答案:this one and lastSelectedData
.
一般来说,jqGrid内部包含一些JavaScript方法,用于本地数据的排序和过滤。我在 the old answer tricky technique, which works on old jqGrid (i version <=4.7). Already in the first version of "free jqGrid" fork I implemented lastSelectedData
parameter (see the readme) 中进行了描述,这使得处理最后排序和过滤的本地数据变得非常容易。