colModel: [
{ name: 'Id', index: 'Id', hidden: true, search: false },
{ name: 'Name', index: 'Name', hidden: true, search: false },
]
正如 setSelection 方法允许根据行号在 jqGrid 中选择行一样,是否可以类似地根据其中一个单元格值选择行。
例如在上面的 colModel 中,是否可以选择具有特定“Id”或“Name”值的行...假设这些值对于每行都是唯一的。
在 jqGrid 的
loadComplete:
部分中,您可以迭代每一行并测试您要查找的值。如果找到该值,请选择该行。
例如
loadComplete: function () {
var rowIds = $(this).jqGrid('getDataIDs');
for (i = 1; i <= rowIds.length; i++) {
rowData = $(this).jqGrid('getRowData', i);
if (rowData['Id'] == idSearchValue ) {
$(this).jqGrid('setSelection',i);
} //if
} //for
...
还有
rowattr:
,但我似乎找不到在哪里可以获得当前行的rowID。 Oleg 可能会看到这一点并做出回应,因为这是他对 jqGrid 的添加,但我的测试没有任何运气,也没有阅读如何获取当前 rowId 以传递给 setSelection
方法。
如果您有一个包含单元格值的对象数组,您将需要另一种方法。
例如。使用您的
colModel
,您希望检索具有以下值的行:
let toSearch = [
{ Name: 'Arthur', Id: 150},
{ Name: 'Julien', Id: 90},
]
那么您可以做的是从 jqGrid 表中检索整个数据并动态查找值:
let data = $grid.jqGrid('getGridParam', 'data');
let toSelect = data.filter((row,i) => {
return toSearch.some(toSelectRow => {
for(let prop in prevRow) {
if(prevRow[prop] != row[prop])
return false;
}
return true;
})
});
toSelect.forEach((row) => $grid.jqGrid('setSelection',row.id, false)); // Prevent firing onSelectRow event
这里我们通过
false
来防止触发 onSelectRow
事件,如果您需要它,只需删除 false
我在 Mark 的回答中发现了错误 =)
仅当 rowIds = [0,1,2,...]
时才有效我的版本是
loadComplete: function () {
let rowIds = $(this).jqGrid('getDataIDs')
i = 1,
rd = [];
for (i ; i <= rowIds.length; i++) {
rd = $(this).jqGrid('getRowData', rowIds[i]);
if (rowData['Id'] === idSearchValue ) {
$(this).jqGrid('setSelection',rowIds[i]);
} //if
} //for
...
}