10

ドロップダウン列を持つ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 クリック遅れます。

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

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

4

1 に答える 1

3

次のように、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>");
    } } }

静的な Apples & Oranges オプションを GetLookupValues() 関数に置き換えるだけです。

于 2010-01-20T19:47:22.943 に答える