根据单元格值在jqGrid中选择一行

问题描述 投票:0回答:3
colModel: [
            { name: 'Id', index: 'Id', hidden: true, search: false },
            { name: 'Name', index: 'Name', hidden: true, search: false },
          ]

正如 setSelection 方法允许根据行号在 jqGrid 中选择行一样,是否可以类似地根据其中一个单元格值选择行。

例如在上面的 colModel 中,是否可以选择具有特定“Id”或“Name”值的行...假设这些值对于每行都是唯一的。

jqgrid
3个回答
9
投票

在 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
方法。


0
投票

如果您有一个包含单元格值的对象数组,您将需要另一种方法。

例如。使用您的

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


0
投票

我在 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
   ...
}
© www.soinside.com 2019 - 2024. All rights reserved.