2009-08-18 258 views
10

jqgridをドロップダウン列で作成しています。私はセル編集を使用しています。私は動的に変化する列のドロップダウンのオプションを必要とし、私はあることを、列を設定することで、これを実装しようとしました:jqGrid動的選択オプション

{ name: "AccountLookup", index: "AccountLookup", width: 90, editable: true, resizable: true, edittype: "select", formatter: "select" }, 

、その後beforeCellEditイベントで私が持っている:

beforeEditCell: function(id, name, val, iRow, iCol) { 
     if(name=='AccountLookup') {    
      var listdata = GetLookupValues(id, name); 
      if (listdata == null) listdata = "1:1";        
      jQuery("#grid").setColProp(name, { editoptions: { value: listdata.toString()} })         
     } 
    }, 

GetLookupValuesを"1:One; 2:Two"のような形式の文字列を返します。 これはうまくいきますが、オプションが1回クリックするだけです。つまり、行1のAccountIDをクリックするとドロップダウンが空です。行3のAccountIDをクリックすると、行1のクリックで設定したオプションが行3のクリックに表示されます。等々。だから、常に1回後ろをクリックしてください。

私は必要なものを達成する別の方法がありますか? Bacially表示されるドロップダウンオプションは常に変化しており、ユーザーが編集のためにセルを入力するときにそれらをロードする必要があります。 おそらく、私は何とかbeforeEditCellイベントのselectコントロールにアクセスし、setColPropコールを使用する代わりにその値を手動で入力できますか?もしそうなら、私はそれをする例を挙げることができますか?

もう1つのこと - ドロップダウンが空で、ユーザーがセル編集をキャンセルしない場合、グリッドスクリプトはエラーをスローします。私は違いがある場合は、clientarrayの編集を使用しています。

+0

さらにもう1つ - select列のgetChangedCellsオプションは常にテキストを返しますが、値は/ Idではありません - これを回避する方法はありますか? –

答えて

4

あなたはこのように、dataInitオプションを使用することができます。

{ name: "AccountLookup", index: "AccountLookup", width: 90, 
    editable: true, resizable: true, edittype: "select", formatter: "select", 
    editoptions: { dataInit: function(elem) 
    { 
     $(elem).empty() 
      .append("<option value='1'>Apples</option>") 
      .append("<option value='2'>Oranges</option>"); 
    } } } 

ちょうど&オレンジのオプションあなたのGetLookupValues()関数で静的なりんごを交換してください。

関連する問題