2009-05-08 23 views
6

私はcoldfusionプロジェクトで作業する基本的なjqGridを得ました。 jqGridの私のフィールドの一つはコンボボックスです。現在、編集オプション値は以下のようにハードコードされています。jqGrid、クエリから選択リストを設定する方法

colModel : 
[ 
    { 
    name:'seqnum',index:'seqnum', width:100,resizable:true, 
    align:"left",sorttype:"text",editable:true,edittype:"select",editoptions: 
    { value:"1:one;2:two"},editrules:{required:true} 
    } 
] 

私は、クエリ/ URLからドロップダウンを埋め込む方法を見つけようとしています。

ご協力いただければ幸いです。事前

答えて

6

おかげでURLを照会するためにJSONを使用する関数を作成します。この関数は、 "1:1; 2:2"という形式の文字列を返さなければなりません。例えば

colModel : 
    [ 
     { 
     name:'seqnum',index:'seqnum', width:100,resizable:true, 
     align:"left",sorttype:"text",editable:true,edittype:"select",editoptions: 
     { value:getSequenceNumbers()},editrules:{required:true} 
     } 
    ] 

    function getSequenceNumbers(){ 
     $.getJSON("yourUrl", null, function(data) { 
      if (data != null) { 
       //construct string. 
       //(or the server could return a string directly) 
      } 
     }); 
    } 

私はあなたにも機能をインラインに置くことができると仮定し、私は読みにくいと思います。

5

dataUrl ...(see the wiki here)を使用してください。

現在、dataUrlはGETを生成しますが、Githubからコードを取得すると、GETは明らかな副作用のないPOSTに変更される可能性があります。

+1

作品のこの種が、あなたは、それゆえフォーマッタをセルを編集するときにのみ火災リストを取得するために、AJAXとして示されていますこの。 – Cruachan

+0

dataUrlメソッドにいくつかのパラメータを渡すことはできますか?パラメータとして私は選択された行($( '#grid')からいくつかの値を送信したいと思います)getRowData(id)['colName'] – Anatoliy

6

$ .getJSON/getSequenceNumbers()の回答は、提示どおりには機能しません。コールバックが非同期であるため、getSequenceNumbers()の戻り値としてコールバックからデータを返す方法はありません。 Martinによって提案されたdataURLメソッドを使用するか、$ .getJSONコールバックの中でjqGridを設定する必要があります。

$(document).ready(function() { 
$.getJSON("GetURL", function(data) { 
    setupGrid(data); 
}); 
}); 

function setupGrid(data) { 
... 
    colModel : 
    [ 
     { 
     name:'seqnum',index:'seqnum', width:100,resizable:true, 
     align:"left",sorttype:"text",editable:true,edittype:"select",editoptions: 
     { value:data},editrules:{required:true} 
     } 
    ] 

... 
} 
+0

私はこのメソッドworks.justを試してみました。JT –

4

サーバー側のスクリプト言語を使用している場合は、問題を完全に回避できます。 PHPで例えば、あなたは

'value:"1:one;2:two"'; 

たぶんとしてエレガントではないか、などのような携帯例えば、適切な文字列を返すために、さらにページまで)

{name:'myselectdata', index:'myselectdata', width:160, formatter:'select', editable:true, edittype:"select", cellsubmit:"clientArray", editoptions:{ <? echo getData() ?>} }, 

それからちょうどセットアップPHP関数のgetDataを(使用する場合がありますjQueryのすべてを処理しますが、概念的にはもっと簡単ですと思います。

edittype:"select" 

その後、editoptionsパラメータに追加します。

{name:'id_UDM', index:'id_UDM', width:150, editable:true, edittype:"select", editoptions:{dataUrl:'filename.php'}} 

あなたが最初にこのとのselect要素があることを宣言する必要があります。

+0

正しいデータフォーマットこのhttp://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rulesに従って{value:{1: 'One'、2: 'Two'}}}になります – buzibuzi

3

はあなたのColModelにあなたは、このような列を持っているとしましょうdataUrlは次のようになります。

editoptions:{dataUrl:'filename.php'} 

filename.phpはそれはオプションです。例は次のとおりです。

<?php 
    include("connectionToMyDatabase.php"); 
    $query1 = "SELECT * FROM table WHERE 
    $result1 = mysql_query($query1); 
    $response ='<select>'; 
    while($row = mysql_fetch_array($result1)) { 
     $response .= '<option value="'.$row['value'].'">'.$row['name'].'</option>'; 
    } 
    $response .= '</select>'; 

    echo $response; 

mysql_close($db); 
?> 

1

これは古い質問ですが、私は同じ問題を発見しました。
私はこれをdataUrlとajaxSelectOptionsの組み合わせで解決します。

colModel:[ 
    //class_id 
    $.extend(true, 
    { 
     name:'class_id' 
     ,index:'class_id' 
     ,edittype:'select' 
     ,formatter:'select' 
     ,editoptions: { dataUrl:"db.php?ajaxOp=getClassesOptions" } //to send dynamic parameter, combine with ajaxSelectOptions 
    } 
    ,{} 
    ) 

dataUrl文字列が静的であることに注意してください、あなたは異なるパラメータを追加/編集が発生するたびに送信することはできませんを意味します。以下のコードはうまくいかない!

,editoptions: { dataUrl:"db.php?ajaxOp=getClassesOptions" + "&id="+selected_id } 

idなどのパラメータを送信するには、ajaxSelectOptionsを使用できます。

ajaxSelectOptions:  //use this for combination with dataUrl for formatter:select 
{  
    data: { 
     id: function() { 
      return selected_id; 
     } 
    } 
},  

selected_idを返す関数は、追加/編集が実行されるたびに実行されます。お役に立てれば !

0

editoptionsではなくsearchoptionsのコードを変更しました。しかし、それは自動的に最初のオプションを選択し、リストをフィルタリングしていたので、それを軽減するために以下を追加しました。と互換性がありません「選択」:あなたが最初の値をデコードしたくない場合にのみ

$response ='<select>'; 
$response .= '<option value=""></option>'; 
while($row = $stmt->fetch(PDO::FETCH_NUM)) { 
     $response .= '<option value="'.$row[0].'">'.$row[0].'</option>'; 
} 
$response .= '</select>'; 

echo $response; 
関連する問題