2012-04-09 43 views
2

私はsetColPropを使用して、select編集タイプに値を動的に読み込みます。jqgrid setColPropが動作しない

私は呼んでいつでも値が正常にロードがあります。

loadComplete: function() { 
       $("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} }); 
      }, 

それだけで一度だけここで働き、しかし。私はcontract_listの値を変更し、(afterSubmitから、ボタンクリックから、あるいはリロードテーブル)の任意の場所から再び

$("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} }); 

を呼び出すことによってjqgridを更新しようとした場合、それはまったく何もしません。

私が間違っていることはありますか?

編集: ここで私がしようとしていることのより良い説明です。

私はidが#profile_tableのjqGridテーブルを持っています。編集中

colModel:[ 
       {name:'contract_num',index:'contract_num', editable: true, hidden: false, width:30, edittype: "select", editrules: {required: true}}, 
] 

最初contract_num編集フィールド/フォームを追加し、そのselectボックスに値がない:

これはjqGridコードでcolModelの一部です。テーブルが作成される前に作成されたcontract_listというjavascript変数から初期値をロードします。私が使用して最初にこれらの値をロードします。これは、正常に動作します

loadComplete: function() { 
       $("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} }); 
      }, 

、しかしユーザは、このテーブルが上に表示されていることをページ上で何かを変更するたびにcontract_listの値が変更される可能性があります。だから、selectボックス内のオプションをこのテーブルの編集/追加フォーム内のcontract_numフィールドに動的に更新しようとしています。私は正常にcontract_listの内部の値を変更しますが、実際のselectボックスを新しい値に更新することはできません。

$("#profile_table").setColProp('contract_num', { editoptions: { value: contract_list} }); 

をして、誰かがcontract_listの値を変更するたびに、グリッド、しかしテーブルが更新されていないがリロード:

私は呼び出すことによってそれを更新しようとしています。

+0

ajaxSelectOptions: { cache: false } jqGridオプションを設定するために要求される可能性が問題はより詳細になります。 'editoptions.value'はどのように使用されますか?たとえば、*編集モードでいくつかの行がある場合*選択は自動的には適用されませんが、編集を開始する次の行は新しい設定を使用します。 'formatter: 'select'と' editoptions.value'を一緒に使うとグリッドをリロードしてグリッドボディに変更を適用する必要があります。より完全なコード例を含めることができますか? – Oleg

+0

私は何をしようとしているのより多くのコードと良い説明を追加しました、あなたは今、私の問題を理解することを願って – Sandoichi

+0

申し訳ありませんが、更新された部分は何もクリアされません。あなたは「私は実際の選択ボックスを新しい値に更新することはできません」と書いています。 「実際の選択ボックス」とは何ですか?選択は**いくつかのセルまたは行を編集する場合にのみ**存在します(私はあなたが使用する編集モードをまだ知りません)。なぜ 'setColProp'の後にグリッドをリロードするのですか?編集モードで何行か現時点ではありますか?答えが "no row"の場合、リロードは必要ありません。なぜあなたは 'loadComplete'の中に' setColProp'を置いたのですか?私は 'contract_list'を誰が変えるのか、どうやってこれを行うのか分かりません。いくつかのイベントハンドラでこれを行いますか? – Oleg

答えて

4

recreateForm: trueフォーム編集のオプションを使用すると、あなたの主な問題は解決されると思います(hereの使用例を参照)。 navGridhere相当のコードを参照)を呼び出す前に、の設定をの前に設定することをお勧めします。

また、あなたがコメントで書いた情報から、私はあなたがより良いdataUrl代わりのeditoptionsvalue使うべきだと思います。したがって、jqGridは、編集フォームの作成中にサーバーから直接値のリストをロードできます。場合によってはbuildSelectの使用が便利です。例えばJSON形式でサーバーからデータを提供し、buildSelectのサーバーデータに基づいてHTMLフラグメント<select><option value="...">...</option>...</select>を構築するのに役立ちます。さらに、それはあなたが記述することが重要です(hereまたはhereを参照)またはHTTPヘッダー"Cache-Control: private, max-age=0"のに対しdataUrlに以前のサーバレスポンスの再検証を強制する(herehereを参照)

+0

'recreateForm:true'を使うと助けにはなりませんでしたが、' dataUrl'を使うようにコードを変更しました。そして、 'select'フィールドは編集フォームが開かれるたびにajaxを通して再移植されます。ありがとうございました! – Sandoichi

関連する問題