JQGrid программно выбирает строку сетки - PullRequest
9 голосов
/ 25 августа 2010

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

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

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

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

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

1 Ответ

17 голосов
/ 26 августа 2010

Поскольку вы используете 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 .

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

...