2011-01-26 7 views
6

Я с помощью jqgrid с большим успехом в следующем виде:Доработка редактирование в jqgrid

  1. Данные загружаются с сервера, как JSON
  2. Пользователь делать встроенное редактирование
  3. При сохраняемый кнопки Щелчок по всем данным сериализуется с использованием:

    var data = $ ("# mygrid"). getRowData();

    var datajson = JSON.stringify (data);

Проблема с этим ПОДХОД, что я буду получать входные элементы в моей JSON-данных, если пользователь не нажал возврата или отошел от редактируемой ячейки. Есть ли способ закончить режим редактирования i jqgrid?

ответ

5

Для того, чтобы сохранить данные, Вы можете использовать saveRow.

Чтобы использовать saveRow, вам необходимо знать идентификатор строки текущей редактируемой строки. Например, вы можете сохранить rowid текущего редактирования в переменной (прежде чем вы вызовете editRow) и используйте значение для вызова метода saveRow.

ОБНОВЛЕНО: см. the demo. Сначала выберите некоторую строку, измените значения и нажмите кнопку «Сохранить текущую строку редактирования». Вы увидите, что изменения будут сохранены.

+0

К сожалению, это не делает. saveRow вызывает метод сохранения строки, но ячейка все еще находится в режиме редактирования. – Bebben

+1

@Bebben: Вы сделали некоторую ошибку в своей реализации. Я добавил демонстрацию, демонстрирующую, что использование 'saveRow' работает. Если вам нужно сохранить данные на сервере вместо локального сохранения, вы должны использовать другие параметры 'saveRow': просто прочитайте ссылку« saveRow », которую я вам разместил. – Oleg

+0

Спасибо, Олег! Сейчас работает как шарм! Я думаю, проблема заключалась в том, что у меня была сетка в celledit, и прежде чем я могу вызвать saveRow, я должен вызвать cellEdit. Теперь я начинаю с установки всех строк в режиме редактирования и перед отправкой вызова saveRow во все строки. Благодаря! – Bebben

0

Я решил ее запуск «KeyDown» ENTER события на элементе:

editoptions: { 
        dataInit: function(elem) { 
         $(elem).datetimepicker({ 
          dateFormat: "yy-mm-dd", 
          onClose: function(datetimeText, datepickerInstance) { 
           $(elem).trigger($.Event("keydown", { keyCode: $.ui.keyCode.ENTER })) 
          } 
         }); 
        } 
       } 
0

Я использую удаленный представлять для каждой ячейки, и, как я использовал «contenteditable» ДИВ для редактора ячейки (для многострочного текста), Я хотел закончить редактирование ячейки с помощью ctrl-enter.

(на основе ответа Олега и How to close cell-editor? и http://www.trirand.com/jqgridwiki/doku.php?id=wiki:cell_editing)

$(document).ready(function() { 
    var grid,currentCell; 
    $(".jqGrid_wrapper").on("keydown","div[contenteditable]",function (e) { 
     if (e.ctrlKey && e.keyCode == 13) 
     { 
      grid.jqGrid("saveCell",currentCell.iRow,currentCell.iCol); 
      return false; 
     } 

     return true; 
    }); 
    grid=$("#table_list_2"); 
    grid.jqGrid({ 
     url: ... 
     cellEdit: true, 
     cellsubmit: 'remote', 
     cellurl: '..',  

     beforeEditCell: function(rowid, cellname, value, iRow, iCol) { 
      currentCell={ 
        rowid:rowid, cellname:cellname, value:value, iRow:iRow, iCol:iCol 
      } 
     }    
    }); 
}); 
Смежные вопросы