2016-01-12 2 views
0

У меня возникла проблема с передачей дополнительных данных удаления, когда строка находится в режиме редактирования (inlinde editing), и пользователь нажимает на delete (navgrid).jqGrid удалить строку в режиме редактирования и передать дополнительные данные

вот мой код:

.navGrid('#' + childGridPagerID, {add: false,edit: true,del: true, cancel: true, refresh: true, view: true, search:false},{}, 
       {// edit options 
         editCaption: "Exercise Special Note",template: template, 
         errorTextFormat: function (data) { 
          return 'Error: ' + data.responseText 
         }, 
       }, 
       { // del options 
        mtype:"POST", reloadAfterSubmit:true, serializeDelData: function (postdata) { 
         var selRowId = $("#" + childGridID).jqGrid ('getGridParam', 'selrow'); 
         //console.log(selRowID); 

         if ($("#"+selRowId).attr("editable") === "1") { 
          $("#" + childGridID).editRow(selRowId, false); 
          var rowdata = $("#" + childGridID).getRowData(selRowId); 
         } 
         console.log(rowdata); 

        // append postdata with any information 
        } 
       } 
    ) 

я знаю, что документация говорит, что getRowData не будет работать в режиме редактирования, так что я пытался инвалидов в режим редактирования прямо перед я называю getRowData, но до сих пор получить HTML в консольном журнале вместо реальных данных. я также видел, что я мог сначала сохранить строку, а затем получить свои данные перед ее удалением. Большая часть полей требуется, и пользователь может удалить строку без заполнения всего поля, которое побудит пользователя ввести требуемое поле ,

ответ

1

Если я правильно понимаю вашу проблему, вы должны вызвать restoreRow или saveRow вместо использования editRow внутри serializeDelData. Кстати, postdata содержит идентификатор удаляемой строки, поэтому вам не нужно использовать .jqGrid ('getGridParam', 'selrow'), чтобы получить ту же информацию. Измененный код может быть:

serializeDelData: function (postdata) { 
    var rowId = postdata.id; // or postdata[this.p.prmNames[id]] 

    if ($("#"+rowId).attr("editable") === "1") { 
     $(this).restoreRow(rowId); 
     var rowdata = $(this).getRowData(selRowId); 
     console.log(rowdata); 
    } 

    // append postdata with any information 
    ... 

    return postdata; 
} 

Кстати, вы можете рассмотреть, чтобы использовать другую функцию обратного вызова, чтобы распространять информацию, размещены на сервере. Например, цель onclickSubmit точно обеспечивает такую ​​информацию. Он может вернуть {} или объект, который будет объединен с основной информацией. Код может быть что-то вроде

onclickSubmit: function (deleteOptions, rowids) { 
    $(this).jqGrid("restoreRow", rowids); 
    var rowData = $(this).jqGrid("getRowData", postdata); 
    return {id1: rowData.id1, id2: rowData.id2}; 
} 
+0

Спасибо Олега, однако я должен отметить, что это является частью Подсеточных три уровня, и, когда я использую вар RowId = postdata.id я не получить реальный идентификатор, который позволяет мне для получения rowData. при использовании этого метода он возвращает индекс строки (1, 2, 3, ...) и т. д., но когда я использую метод getGridParam, я получаю реальный id, в моем случае он возвращает progGrid_1_table_d_1_1, после чего я могу получить Данные ряда. Спасибо за помощь, вы - главный мастер. – boulepick

+0

@ boulepick: Добро пожаловать! Если у вас есть столбец с реальным идентификатором, то в столбце вы можете «key: true». Он сообщает jqGrid использовать значение как rowid, а 'postdata.id' будет уже тем, что вам нужно. В случае, если вы удалите часть своего кода. – Oleg

Смежные вопросы