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

时间:2013-02-26 17:28:42

标签: jqgrid

colModel: [
            { name: 'Id', index: 'Id', hidden: true, search: false },
            { name: 'Name', index: 'Name', hidden: true, search: false },
          ]

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

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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