Метод jqGrid для размещения указанной c ячейки - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть сетка с методом, который вычисляет значение в зависимости от разных ячеек в строке. Затем я устанавливаю определенную ячейку c, которая будет содержать это значение:

  $("#gridID").setCell(rowid, "Cell_Name", myCalculatedValue);

Затем я хочу завершить это, сохранив значение в базе данных, но не могу найти способ для этого. По сути, я хочу получить

$("#gridID").saveCellToDataBase(rowid, "Cell_Name");

Поскольку эта ячейка является не отредактированной ячейкой, а вычисленным значением из-за другой редактируемой ячейки, она не сохраняется по умолчанию.

Я надеялся, что методы, которые может решить мою проблему будет:

$("#gridID").jqGrid("saveRow", rowid, true);

или

$("#gridID").saveCell(rowid, "Cell_Name");

Но ни один из этих методов, кажется, не делает то, что я хочу.

1 Ответ

0 голосов
/ 13 февраля 2020

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

Как Вы знаете, что недоступные для редактирования поля не публикуются на сервере и, следовательно, их нельзя сохранить. Чтобы это произошло, я вижу здесь два возможных решения.

  1. Выполните вычисления на сервере, не отправляя это значение из jqGrid
  2. Рассчитайте значение в jqGrid и отправьте его на сервер

Все они имеют свои плюсы и минусы, и я полагаю, что вы не можете сделать этот расчет на сервере.

Чтобы отправить дополнительное значение на сервер от редактирования, зависит от используемый метод редактирования - редактирование формы, встроенное редактирование или редактирование ячейки.

Ниже я опишу возможное решение со встроенным редактированием, а в качестве упражнения вы найдете его для других методов.

В jqGrid есть это механизм для публикации того, что вы хотите на сервере снова с отредактированными полями. В наших терминах мы называем это сериализацией. Эта сериализация происходит перед отправкой данных на сервер и имеет разные имена в зависимости от модуля редактирования. В случае встроенного редактирования это событие называется serializeRowData и является параметром сетки, а не параметром события.

В вашем случае код должен выглядеть следующим образом:

$("jqGrid").jqGrid({
    ...
    serializeRowData : function( data ) {
    // suppose you have Qty and Unit field and want to post Total = Qty*Unit

        if(data.Qty && data.Unit) {
            data.Total = data.Qty*data.Unit;
        }
        return data;
    } 

Обратите внимание на возврат в конце serializeRowData. Так что это событие выполняется каждый раз, когда вы вызываете saveRow, но это хорошо описано в документации Guriddo

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