Как установить значения по умолчанию, если строка добавляется с помощью встроенной кнопки добавления в jqgrid - PullRequest
6 голосов
/ 15 января 2012

Код ниже устанавливает значения по умолчанию для новой строки, если строка добавляется с помощью формы.Если строка добавляется с помощью встроенной кнопки добавления jqGrid на панели инструментов, эти методы не вызываются и значения по умолчанию не устанавливаются.

Как заставить встроенное добавление выполнять ту же логику, что и код ниже?

var lastSelectedRow;
$grid.navGrid("#grid_toppager", { 
del: true,
add: true,
view: true,
edit: true
          }, 
          {},

       { 
       addedrow: 'beforeSelected',
       url: '/Grid/Add?_entity=Desktop',
       beforeInitData: function () {
         // todo: how to call this method from inline add
         var rowid = $grid.jqGrid('getGridParam', 'selrow');
         if (rowid === null) {
           alert( 'Select row before adding');
           return false;
           }
         },

       afterShowForm: function(formID) {
         // todo: how to set default values as this method sets from inline add
         var selRowData, 
            rowid = $grid.jqGrid('getGridParam', 'selrow');
         $('#' + 'Recordtype' + '.FormElement').val('Veerg');
         $('#' + 'Nait2' + '.FormElement')[0].checked = true;
         selRowData = $grid.jqGrid('getRowData', rowid);
         $('#' + 'Baas' + '.FormElement').val(selRowData.Baas);
         $('#' + 'Liigid' + '.FormElement').val(selRowData.Liigid);
       }
       );


$grid.jqGrid('inlineNav', '#grid_toppager', {
    addParams: {
        position: "beforeSelected", 
        rowID: '_empty',
        useDefValues: true,
        addRowParams: {
            keys: true,
            onEdit :  onInlineEdit
        }
    },

    editParams: {
        editRowParams: {
            onEdit : onInlineEdit
            }
    },

   add: true,
   edit: false,
   save: true,
   cancel: true
}); 

function onInlineEdit(rowId) {
  if (rowId && rowId !== lastSelectedRow) {
        cancelEditing($grid);
        lastSelectedRow = rowId;
    }
  }

Обновление

Я попробовал код

 $grid.jqGrid('inlineNav', '#grid_toppager', {
    addParams: {
        position: "beforeSelected", 
        rowID: '_empty',
        useDefValues: true,
        addRowParams: {
            keys: true,
            extraparam: { _dokdata: FormData },
            onSuccess : function (jqXHR) { 
alert('addp oncuss');
              jqXHRFromOnSuccess=jqXHR;
              return true;
              },
            afterSave: function (rowID) {
alert('afeesave addp ');
              cancelEditing($grid);
                  afterDetailSaveFunc(rowID,jqXHRFromOnSuccess);
              jqXHRFromOnSuccess=null; 
              },
            onError: errorfunc,
            afterRestore : setFocusToGrid,
            oneditfunc  : function (rowId) {
              var selRowData, selRowId ;
              if (rowId && rowId !== lastSelectedRow) {
                cancelEditing($grid);
                selRowId = $grid.jqGrid('getGridParam', 'selrow');
                if (selRowId ) {
                   selRowData = $grid.jqGrid('getRowData', selRowId ); 
                   $('#' + rowId + '_Reanr' ).val(selRowData.Reanr); 
                  }
                lastSelectedRow = rowId;
                }
             }
        }
    }
);

Вызывается только функция oneditfunc.Как заставить также вызываться методы onSuccess, afterSave, onError и т. Д.?

Обновление 2

Я добавил исправление в jqGrid из github, рекомендованного в ответе, и попытался

$.extend( jQuery.jgrid.inlineEdit, {
  addParams: { 
    position: "beforeSelected", 
    rowID: '<%= EntityBase.NewRowIdPrefix %>',
    useDefValues: true,
    addRowParams: {
      keys: true,
      extraparam: { _dokdata: FormData },
      onSuccess : function (jqXHR) { 
        jqXHRFromOnSuccess=jqXHR;
        return true;
        },
      afterSave: function (rowID) {
              cancelEditing($grid);
              <% if (Model is RowBase ) { %>
                  afterDetailSaveFunc(rowID,jqXHRFromOnSuccess);
                <% } else { %>
                  afterGridSaveFunc(rowID,jqXHRFromOnSuccess);
                <% } %>
              jqXHRFromOnSuccess=null; 
              },
      onError: errorfunc,
      afterRestore : setFocusToGrid,
      oneditfunc : function (rowId) {
        if (rowId && rowId !== lastSelectedRow) {
          cancelEditing($grid);
          lastSelectedRow = rowId;
          }  
        } 
      }
    }
} );

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

1 Ответ

5 голосов
/ 16 января 2012

Вы должны использовать defaultValue свойство editoptions , чтобы установить значения по умолчанию для новой добавленной строки.В текущей документации вы можете обнаружить, что опция действительна только в модуле редактирования формы:

Опция может быть строкой или функцией.Эта опция действительна только в модуле редактирования формы при использовании с методом editGridRow в режиме добавления.Если определено, элемент ввода устанавливается с этим значением, если только элемент пуст.При использовании в тексте должен быть указан текст, а не ключ.Также, когда используется функция, функция должна возвращать значение.

, но если вы изучите код нового метода addRow , вы увидите, что

  1. значение по умолчанию для опции useDefValues равно true
  2. , используемый методом (см. здесь ), свойство defaultValue editoptions .

ОБНОВЛЕНО : ОК!Теперь я вижу твою проблему.Вы использовали только неправильные свойства в editRowParams и addRowParams частях настроек.Правильно будет:

$grid.jqGrid('inlineNav', topPagerSelector, {
    addParams: {
        position: "beforeSelected", 
        rowID: '_empty',
        useDefValues: true,
        addRowParams: {
            keys: true,
            oneditfunc :  onInlineEdit
        }
    },
    editParams: {
        keys: true,
        oneditfunc: onInlineEdit
    },
   add: true,
   edit: false,
   save: true,
   cancel: true
});

Более того, вы можете использовать новую функцию $. Jgrid.inlineEdit для установки keys, oneditfunc или других параметров встроенного редактирования.Реализация этой функции не является полностью корректной, но вы можете просмотреть текущую версию из github (см. здесь ) и сделать такую ​​же модификацию в вашей версии jquery.jqGrid.src.js.В любом случае, я бы порекомендовал использовать функцию $. Jgrid.inlineEdit после публикации следующей версии jqGrid.Преимущество заключается в том, что вы можете легко устанавливать параметры editRow независимо от того, где будет вызываться функция (из inlineNav, 'actions' форматера или любым другим способом).

Новая jqGridInlineEditRow функция события (см. здесь для получения дополнительной информации) позволит вам реализовать такие действия, как то, что вы делаете сейчас, в onInlineEdit событие без использования oneditfunc, которое можно установить только один раз.

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