Как обновить столбец после встроенного добавления в jqGrid - PullRequest
2 голосов
/ 04 марта 2012

jqGrid содержит столбцы, определенные в colmodel как

{"name":"_actions",
  "formatoptions":{"editbutton":true,"keys":true
  ,"delbutton":true
    } },

{ "name":"Kood","editable":true,"hidden":true}

Новая строка добавляется в сетку нажатием встроенной кнопки добавления на панели инструментов. После сохранения данных контроллер возвращает новое значение столбца Kood. Это новое значение должно быть присвоено столбцу Kood.

Код ниже показывает два метода, которые я пробовал, но оба не удаются. Значения столбца Kood не меняются

Как обновить столбец после встроенного добавления? Как обновить столбец, если встроенная добавленная строка сохраняется с помощью кнопки «Сохранить действие»?

$grid.jqGrid('inlineNav', '#grid_toppager', {
  addParams: {
     addRowParams: {
            keys: true,
            // This is called if enter key is pressed to save added row
            aftersavefunc: afterSaveFuncAfterAdd,
        }
    },

  editParams: {
      keys: true,
      // This is called if saver button in toolbar is pressed on inline add
      aftersavefunc: afterSaveFuncAfterAdd,
    },
add: true,
edit: false,
save: true,
cancel: true
});

function afterSaveFuncAfterAdd(rowID, response ) {
  var json = $.parseJSON(response.responseText);
      postData = $grid.jqGrid('getGridParam', 'postData');
  // this shows correct value:
  alert(json.PrimaryKeyValues[0]);
  // attempt 1:
  $('#' + rowID + '_Kood').val(json.PrimaryKeyValues[0]);
  // attempt2:
  postData['Kood'] = json.PrimaryKeyValues[0];
  }

1 Ответ

5 голосов
/ 05 марта 2012

Обратный вызов aftersavefunc из editRow будет вызван после и после редактирования. На данный момент вы не найдете $('#' + rowID + '_Kood'). Более того, postData не будет изменено во время встроенного редактирования, поэтому $grid.jqGrid('getGridParam', 'postData') не даст вам никакой полезной информации.

Поэтому я рекомендую выложить обратно все необходимые данные в качестве ответа от editurl. Например, столбцы, значения которых по умолчанию рассчитываются сервером, например, отметка времени последнего редактирования, можно отправить обратно. Ответ операции Add должен дополнительно содержать id, сгенерированный сервером. Вы можете использовать setRowData или setCell для изменения данных в сетке после получения ответа от сервера.

Например, Вы можете вернуть

{"Id": "DB_Id", "Kood": "new Kood value"}

с сервера в качестве ответа на операцию «Добавить» и возврата

{"Kood": "new Kood value"}

как ответ на операцию «Редактировать». В случае, если код afterSaveFuncAfterAdd может быть похож на следующий

var afterSaveFunc = function (rowId, response) {
    var data = $.parseJSON(response.responseText);
    if ($.isPlainObject(data) && typeof data.Kood !== "undefined") {
        if (typeof data.Id !== "undefined") {
            // if we have 'Id' column in the grid we have to update the column
            // together with the value of `Kood`
            $(this).jqGrid('setRowData', rowId, { Id: data.Id, Kood: data.Kood });
            // if we have no additional `Id` we can update the Kood column only with
            // the statement like below
            // $(this).jqGrid('setCell', rowId, 'Kood', data.Kood);

            // in case of "Add" operation we have to update the row Id
            $('#' + $.jgrid.jqID(rowId)).attr('id', data.Id);
        } else {
            $(this).jqGrid('setCell', rowId, 'Kood', data.Kood);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...