JQGrid программно выбрать строку сетки

У меня есть JQGrid с loadonce: true (так что это все на стороне клиента) и включенной подкачкой страниц (скажем, с 20 страницами) ).

Я хотел бы указать строку (программно, без ввода данных пользователем), и чтобы моя сетка переместилась на соответствующую страницу, чтобы выбрать указанную строку.

Возможно ли это с текущей JQGrid?

I ' Я посмотрел на поиск и фильтр, но это просто перезагружает сетку с новыми строками - мне нужна моя сетка, чтобы перейти на правильную страницу - Сохранение ее данных и структуры.

Я нахожусь в процессе оптимизации структуры моей сетки, поэтому любые необходимые изменения (скажем, на стороне клиента и на стороне сервера) будут возможны.

9
задан Cœur 18 January 2019 в 02:17
поделиться

1 ответ

Поскольку вы используете loadonce:true, данные подготавливаются на сервере. На стороне сервера вы можете решить, какую строку следует выбрать. На стороне сервера вы также можете легко вычислить, на какой странице будет выбранная строка. Идентификатор выбранной строки и выбранной страницы вы можете, например, включить как часть пользовательских данных. Таким образом, данные, отправленные с сервера, могут выглядеть следующим образом:

{
    "total": 5,
    "page": 1,
    "records": 107,
    "rows": [
        ...
    ],
    "userdata": {
        "page": 3,
        "selId": 24 
    }
}

Внутри loadComplete вы можете сделать следующее

loadComplete: function(data) {
    if (jQuery("#list").getGridParam('datatype') === "json") {
        // data.userdata is the same as jQuery("#list").getGridParam('userData');
        var userdata = jQuery("#list").getGridParam('userData');
        var curPage = jQuery("#list").getGridParam('page'); // is always 1
        if (curPage !== userdata.page) {
            setTimeout(function(){
                jQuery("#list").setGridParam(
                    { page: userdata.page }).trigger("reloadGrid");
                jQuery("#list").setSelection (userdata.selId, true);
            },100);
        }
        else {
            jQuery("#list").setSelection (userdata.selId, true);
        }
    }
}

Рабочий пример, который вы можете увидеть на http://www.ok- soft-gmbh.com/jqGrid/DataToSelect.htm и http://www.ok-soft-gmbh.com/jqGrid/DataToMultiSelect.htm.

ОБНОВЛЕНИЕ: Free jqGrid поддерживает параметр multiPageSelection:true, начиная с версии 4.10.0. Опция позволяет очень легко установить выделение нескольких строк в сетке (и работает очень быстро, потому что устанавливает состояние выделения непосредственно во время создания тела сетки). См. ответ и демонстрацию и описание к 4.10.0.

17
ответ дан 4 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: