2011-02-14 110 views
4

グリッドが初期化された後、jqGridの編集イベントのイベントハンドラを設定する必要があります。つまり、私はbeforeShowForm編集イベントを処理する必要があります。私はsetGridParamを使ってこれを試しましたが、何もしていないようです。setGridParam()でjqGridの編集オプションを設定する

$('#mygrid').jqGrid('setGridParam', { 
    edit: { 
     beforeShowForm: function(formid) { 
      // handle event 
     } 
    } 
}); 

jqGridのdocumentationは、これらのオプションを設定できるようになっているかについての有益未満です。これらを後で設定するにはどうすればいいですか?私はjqgrid()の2番目の引数でこれを設定できることを知っています。私はそれが作成された後でこれを行う必要があります。

答えて

3

パラメータが内部変数navGridの関数に保存されているため、編集イベントのパラメータを簡単に変更することはできません。したがって、クリックイベントを「編集」ボタンにバインドして、editGridRowメソッドを呼び出す新しいイベントを、必要なすべての新しいパラメータにバインドする必要があります。新しいパラメータには、beforeShowFormのようなイベントハンドラを含めることができます。

を更新し
var grid=$("#list");  // your jqGrid (the <table> element) 
var grid_id = grid[0].id; // id of the <table> element like "list" 
$("#edit_"+grid_id).unbind('click'); // unbind original 'click' handle 
$("#edit_"+grid_id).click(function() { 
    if (!$(this).hasClass('ui-state-disabled')) { 
     var sr = grid[0].p.selrow; // get id of selected row 
     if (sr) { 
      grid.jqGrid("editGridRow",sr, 
         { // here you should place all Edit parameters 
          beforeShowForm: function(formid) { 
           alert("In beforeShowForm()"); 
          } 
         }); 
     } else { 
      // display error message 
      $.jgrid.viewModal("#alertmod",{gbox:"#gbox_"+grid_id,jqm:true}); 
      $("#jqg_alrt").focus(); 
     } 
    } 
    return false; 
}); 

対応するコードは以下程度することができますが、直接どこかeditGridRowメソッドを呼び出すと、あなたは私が知っている

var grid=$("#list");  // your jqGrid (the <table> element) 
var orgEditGridRow = grid.jqGrid.editGridRow; // save original function 
$.jgrid.extend ({editGridRow : function(rowid, p){ 
    $.extend(p, 
      { // modify some parameters of editGridRow 
       beforeShowForm: function(formid) { 
        alert("In new beforeShowForm()"); 
       } 
      }); 
    orgEditGridRow.call (this,rowid, p); 
}}); 
+0

このグリッドは他のコードによって作成され、編集は主に行をダブルクリックすることで行われます。私はそれを取るこれはその場合に動作しませんか? –

+0

@jcm:おそらくあなたの質問にはすでに誤解があります。イベントハンドラ 'beforeShowForm'は、フォーム編集の場合にのみ使用されます。あなたのコードのどこかで 'editGridRow'関数を呼び出すか、' navGrid'関数(例えば '$("#list ")を使ってページャーに" Edit "ボタンを追加してください)jqGrid( 'navGrid'、 '#pager '); ')。別の状況がある場合、イベントハンドラの名前は** before **フォームでなければなりません。どのような編集方法を使用し、どのようにコードがどのように表示されるかをもっと説明できますか? – Oleg

+0

'editGridRow()'が別のコードによって呼び出されています。ページャーバーから呼び出されていません。私は外部の 'editGridRow()'呼び出しでも 'beforeShowForm'をオーバーライドする必要があります。グリッドは変更できない別のコードによって作成されています。 –

-1

を以下にすることができ、コードを変更できない場合少し遅れたのですが、私は同じ問題に遭遇しました。

$.extend($.jgrid.edit, { beforeShowForm: function (frmmgr) { 
    alert('insert code here'); 
} 
}); 
関連する問題