2011-10-30 10 views
5

ツールバーボタンを追加すると、jqgridに新しい行を追加できます。 表示されるフォームを追加すると、すべてのフィールドが空になります。 addコマンドが発行されたときに現在または選択されていた行の列値からフォームフィールド値を追加する方法を設定しますか? jsonリモートデータが使用されています。または、これが簡単な場合、現在の/選択された行を渡してサーバーメソッドを呼び出して、サーバーからフォームを追加するための既定値を取得する方法はありますか?現在の行からjqgridのフォームを追加する際のデフォルトのフィールド値を設定する方法

jqgridには非表示の列も含まれます。可能であれば、追加フォームが保存されている場合は、現在の行の非表示列の値をコントローラに追加する必要があります。

更新

私は、アプリケーションが保存後に開くフォームを追加し続ける

  afterShowForm: function(formID) { 
      var selRowData, 
       rowid = grid.jqGrid('getGridParam', 'selrow'); 
      if (rowid === null) { 
      // todo: how to cancel add command here 
      alert('Please select row'); 
      return; 
      } 

      selRowData = grid.jqGrid('getRowData', rowid); 
      if (selRowData === null) { 
      alert('something unexpected happened'); 
      return; 
      } 

      $('#' + 'Baas' + '.FormElement', formID).val(selRowData.Baas); 
      } 

を使用してオレグ素晴らしい提案を使用しようとしました。最初にBaasフィールドを保存した後は空です。 afterShowFormイベントが1回だけ実行されるように見えますが、すべての保存の後ではありません。これを修正して、フォームを閉じることなくデフォルト値を持つ複数の行を追加できるようにするにはどうすればよいですか? 選択された行がない場合、追加コマンドをキャンセルするかどうかを指定するにはどうすればよいですか?

答えて

4

あなただけは、少なくとも2つのアプローチを使用することができます追加、フォームのためのいくつかの初期化アクションを作成する必要がある場合:

  • editoptionsの内部関数としてdefaultValueプロパティの使用方法を。コールバック関数defaultValueは、選択された行のデータに基づいてAddフォームの対応するフィールドの値を提供できます。最適化の目的で、現在選択されている行のデータをbeforeInitDataコールバック/イベントで1回読むことができます。必要な情報を読み込むだけで、必要な情報を得るためにサーバーとの同期呼び出しを行うことができます。 defaultValueプロパティを使用する唯一の欠点は、jQuery.valメソッドを使用して、フォームの追加のすべてのフィールドのデフォルト値を 'checkbox'例外edittypeに設定することです。チェックボックスjqGridのチェックボックスのチェックボックスのチェックされたプロパティはdefaultValueプロパティによって返された値には0nooffまたはundefinedが見つかりません。したがって、このアプローチは他の編集タイプでは機能しません。たとえば、編集タイプがcustomの場合は失敗する可能性があります。
  • beforeShowFormまたはafterShowFormの使用。コールバック関数内では、フォームの任意の値を設定できます。グリッドの対応する列のフィールドは、対応する列のnameプロパティの値と同じフィールドのIDで見つけることができます。あなたのよう

はすでにはgetGridParamのに対して現在選択された行のIDを取得し、gridメインを選択$('#list')等jQueryオブジェクトが選択された行

var selRowData, rowid = grid.jqGrid('getGridParam', 'selrow'); 
if (rowid !== null) { 
    // a row of grid is selected and we can get the data from the row 
    // which includes the data from all visible and hidden columns 
    selRowData= grid.jqGrid('getGridParam', 'selrow'); 
} 

からデータを取得することができる知っています<table>グリッドの要素。

the demoでは、上記の最初のアプローチがどのように機能するかを確認できます。

+0

ありがとうございます。場合によっては、大きなルックアップテーブルからの外部キー入力に使用されるjqueryUIオートコンプリートフィールドのデフォルト値を設定する必要があります。オートコンプリートはカスタム編集要素として実装されています。この場合beforeShowFormを使用する最も良い方法はありますか? beforeShowFormを他のフィールドでも使用するべきですか?これは、デフォルト値を設定するための2つのメソッドを混同しないようにするためです。 jqueryui自動補完フィールドのデフォルト値を設定するサンプルコードはどこにありますか? – Andrus

+0

回答サンプルのコードサンプルは 'grid.jqGrid( 'getGridParam'、 'selrow');' 2回呼び出します。 – Andrus

+0

@Andrus:どのような方法が*最高のものかは言えません。多くのパラメータに依存する可能性があります。 jQuery UI Autocomplete 'source'は、サーバーからどのようにデータを得ることができるかを多くの可能性を提供するので、あなたの環境に最適な方法を選択する必要があります*。私はちょうど両方がうまく実装できる2つの方法を説明しました。 – Oleg

関連する問題