Как обновить значение данных в jqgrid - PullRequest
14 голосов
/ 05 февраля 2012

Я пытаюсь постоянно обновлять ячейку в jqgrid при загрузке.Я знаю, что могу использовать setCell, но это только обновляет значение для этой страницы.Если я вернусь на страницу, если я не буду явно выполнять еще один setCell для ячейки, будет показано старое значение.Я также пробовал setRowData, но, похоже, делает то же самое.Я использую loadonce, так как мой подход состоит в том, чтобы 1) загрузить данные 2) изменить несколько значений данных на основе некоторых критериев 3) показать измененные значения.Поскольку я использую loadonce, не должен ли быть способ изменить ячейку навсегда в этом сеансе?

ОБНОВЛЕНИЕ:

Ввод кода, который не выдает ошибку, ноне удается перебрать все данные:

var set = 0;

....

gridComplete: function(data){
    setData();
},

....

beforeRefresh: function(data){
    set = 0;
},

....

function setData(){

if(set == 1) return;
... //create hash up here
  var dataArray = jQuery("#grid").jqGrid('getGridParam', 'data');
  var j = 1;
  for (var rows in dataArray) {
    var key = dataArray[rows].name;
    dataArray[rows].level = hashTable[key];
    j++;
  }
  alert(j);
}

Это не циклически перебирает все элементы в массиве, которые загружаются локально.Например, если размер страницы установлен на 30, alert(j) возвращает 30, несмотря на то, сколько элементов я загрузил локально.Однако, если я обновлю график, j будет правильным числом.Почему поведение getGridParam отличается в каждом случае?

Ответы [ 3 ]

31 голосов
/ 05 февраля 2012

Если вы используете loadonce: true, вы должны знать , где , локальные данные будут храниться в jqGrid.У jqGrid есть две опции: data и _index.data - это массив элементов, каждый элемент которого имеет свойство name как свойство name столбцов из colModel.Если вам нужно найти элемент по id (rowid), вы можете использовать _index[rowid] для элемента с rowid в массиве data.Таким образом, чтобы изменить данные в столбце 'myColumn', вы должны сделать следующее:

// first change the cell in the visible part of grid
myGrid.jqGrid('setCell', rowid, 'myColumn', newValue);

// now change the internal local data
var dataArray = myGrid.jqGrid('getGridParam', 'data'),
    indexes = myGrid.jqGrid('getGridParam', '_index');
dataArray[indexes[rowid]].myColumn = newValue;

ОБНОВЛЕНО : Вы можете использовать документированный метод getLocalRow , чтобы изменить локальныйданные:

// first change the cell in the visible part of grid
myGrid.jqGrid('setCell', rowid, 'myColumn', newValue);

// now change the internal local data
myGrid.jqGrid('getLocalRow', rowid).myColumn = newValue;
0 голосов
/ 11 июля 2016

У меня была похожая проблема:
Мне нужно было обновить строку после определенного пользовательского действия (не имеет значения).
Для этого мне нужно было знать точную строку из объекта «данные», даже посленекоторая фильтрация таблицы.
Итак, я нашел способ определить, какая строка была изменена - я добавил свойство RowID для каждого элемента объекта «data» при событии loadComplete:

loadComplete: function () {
            if (firstRun) {
                firstRun = false;
                var dataArray = $('#jqGrid').jqGrid('getGridParam', 'data');
                $(dataArray).each(function (index) {
                    dataArray[index].RowID = index + 1;
                });
            }
        }

И теперь, с помощью кода форматера, я смог получить доступ к rData.RowID, чтобы определить точную строку, в которой было выполнено действие, и получить / установить его представление «данных»

0 голосов
/ 01 июля 2014

Для всех, кто пришел сюда из Google, вот обновленный ответ!

Важным является индекс, который вы можете получить, вызвав getInd-Method.Потому что rowID! = Индекс localRowData.(например: rowId: jqg204, индекс: 5)

РЕДАКТИРОВАТЬ: если в colmodel установить «key: true», вы можете установить собственный rowId (отличный от моего примера «jqg ###", обычно это PK из таблицы базы данных)

var ind = myGrid.getInd(rowId);
var localRowData  = myGrid.jqGrid('getLocalRow', ind);
localRowData.myColumn = newValue;

надеюсь, это поможет!

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