Как выполнить действие в jqGrid после добавления новой строки - PullRequest
6 голосов
/ 01 декабря 2011

есть ли в jqGrid событие для выполнения действия после добавления новой строки?

Я вижу в jqGrid wiki , что есть событие afterInsertRow, но, очевидно, оно срабатывает всякий раз, когда вставляется jqGrid "msgstr "строки в таблицу при отображении таблицы.

Тогда что мне следует использовать, когда я хочу что-то сделать после того, как пользователь "вставит" (сохранит) новую строку?Или есть переменная, которая может дать мне «знать», что добавлена ​​новая строка?

1 Ответ

4 голосов
/ 01 декабря 2011

Основная проблема в том, что для выбора строки вам нужно знать идентификатор новой строки.В большинстве случаев идентификатор будет генерироваться базой данных, в которой вы сохраняете данные на сервере.Поэтому первое требование к коду вашего сервера - вернуть идентификатор новой строки в ответе сервера на операцию «добавить».

Например, код вашего сервера возвращает идентификатор вашей строки в качестве ответа на запрос.операция «добавить».

$("#list").jqGrid('navGrid', '#pager', {/*navGrid options*/}, {/*Edit optoins*/}, {
    /*Add options:*/
    reloadAfterSubmit: false,
    afterSubmit: function (response) {
        return [true, '', response.responseText];
    },
    addedrow: "last", // add new row at the end of grid
    afterComplete: function (response, postdata) {
        // this.gbox is the string like "#gbox_list"
        var gridId = this.gbox.substr(6);
        //if (postdata.oper === "add") {
        //    // highlight the new "added" row
        //    var row = $("#" + $.jgrid.jqID(postdata.id));
        //    row.effect("highlight", {}, 3000);
        //}
        $('#' + gridId).jqGrid('setSelection', postdata.id);
    }
});

В закомментированной части afterComplete я показал, как можно использовать эффект подсветки jQuery UI , чтобы выделить новую добавленную строку (см. старый ответ ).Это может быть альтернативой выбору строки.Вы также можете использовать эффекты выделения и выделения.

Опция reloadAfterSubmit: false имеет как минимум два недостатка.

  1. Если использовать отсортированные данные в сетке (параметр sortnamejqGrid не пустой) строки сетки будут неправильно отсортированы после того, как новая строка будет добавлена ​​в качестве первой или последней строки в сетке.
  2. Если сетка имеетЕсли максимальное количество строк на странице (определено параметром rowNum), добавление новой строки будет следовать за сеткой со слишком большим количеством строк на странице.

Таким образом, вы можете сделать следующее

var idToSelect;

$("#list").jqGrid({
    // ... all jqGrid options
    loadComplete: function () {
        if (idToSelect) {
            $(this).jqGrid('setSelection', idToSelect);
            //$("#" + $.jgrid.jqID(idToSelect)).effect("highlight", {}, 3000);
            idToSelect = undefined;
        }
    }
}).jqGrid('navGrid', '#pager', {/*navGrid options*/}, {/*Edit optoins*/}, {
    /*Add options:*/
    afterSubmit: function (response) {
        // save the id of new row. If the format of the data returned from
        // the server is different you should change the next row
        // corresponds to the returned data. For example if the server returns
        // back JSON data in the form {"myId":"123"} you should use
        // $.parseJSON(response.responseText).myId
        // instead of response.responseText below
        idToSelect = response.responseText;
        return [true, '', response.responseText];
    }
});

В случае, если будет добавлена ​​новая добавленная строка после перезагрузки сетки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...