2012-01-15 25 views
6

以下のコードは、フォームを使用して行を追加する場合の新しい行のデフォルト値を設定します。 ツールバーからjqGridインライン追加ボタンを使用して行を追加すると、これらのメソッドは呼び出されず、 のデフォルト値は設定されません。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; 
    } 
    } 

更新

私は、FUNCが呼び出されるだけoneditfuncコード

$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; 
       } 
      } 
     } 
    } 
); 

を試してみました。 onSuccess、afterSave、onErrorなどのメソッドを強制的に呼び出す方法

アップデート2

私は答えで推奨githubのからjqGridにパッチを追加し、インライン追加Iこの場合は、入力を終了しない

$.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; 
      } 
     } 
     } 
    } 
}); 

を試してみました。このコードのすべてのパラメータは無視されます。

答えて

5

editoptionsdefaultValueプロパティを使用して、新しい追加行のデフォルト値を設定する必要があります。現在のドキュメントでは、このオプションがフォーム編集モジュールでのみ有効であることがわかります。

オプションは文字列または関数にすることができます。このオプションは、追加モードでeditGridRowメソッドと併用すると フォーム編集モジュールでのみ有効です。 が定義されている場合、入力要素は が空の場合のみこの値で設定されます。選択項目で使用する場合は、キーではなくテキストを入力する必要があります。 関数が使用されている場合、関数はvalueを返す必要があります。

いますが、新しいaddRowメソッドのコードを調べる場合は、

  1. useDefValuesオプションのデフォルト値はtrue
  2. hereを参照)のdefaultValueプロパティを使用しない方法であることがわかりますeditoptions

更新済み:OK!今私はあなたの問題を見る。 editRowParamsaddRowParamsの設定で間違ったプロパティを使用しました。正しいは次のようになります。

$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 
}); 

また、あなたは、インライン編集のkeysoneditfuncまたは他のパラメータを設定するための新しい$.jgrid.inlineEdit機能を使用することができます。この機能の実装は完全ではありませんが、github(hereを参照)から現在のバージョンを調べて、ご使用のバージョンのjquery.jqGrid.src.jsで同じ修正を行うことができます。いずれにしても、次のバージョンのjqGridを公開した後で$.jgrid.inlineEdit機能を使用することをお勧めします。利点は、editRowのオプションを(inlineNav'actions'フォーマッタまたは他の方法で)関数が呼び出される場所から独立して簡単に設定できることです。

jqGridInlineEditRowイベント機能は、(詳細についてはhereを参照してください)あなたは一つだけの時間を設定することができoneditfuncの使用せずにonInlineEditイベントの内側に、今何をするかのようなアクションを実装することができます。

+0

ありがとうございます。問題のコードは現在の行からデフォルト値を取得し、現在の行が設定されていない場合は行を追加できません。 defaultValueを使用してこれを実装する方法は? – Andrus

+0

@Andrus:まさにコードが違ったことをする。 val( 'Veerg');および$( '#' + 'Nait2' + '.FormElement')[0] .checkedのような行は '$ ' = true; 'はデフォルト値の純粋な設定です。他の設定のために、なぜあなたは 'onEdit'ハンドラの中の設定を(あなたのケースでは' onInlineEdit'関数内で)しないのか分かりません。 – Oleg

+0

現在の行から値を取得する必要があります。私はonInlineEditで現在の行の値を取得する方法を知らない。おそらく、現在の行が既に追加されています。前の行の値を取得する方法はありません。また、現在の行がない場合は、インラインで追加してください。 onInlineeditは強制的な追加操作を許可しません。新しい行はすでに追加されています。 – Andrus

関連する問題