0

このフォーラムでこれらの問題を解決する方法を調べましたが、成功しませんでした。誰かが私に何が起こっているのか、どのように解決するのかを理解するように促すために少し時間を費やしてくれることを願っています.

トラブルのスナップショットは次のとおりです。

ここに画像の説明を入力

およびサーバーからの JSON 応答:

{"page":"1","total":1017,"records":"20335","rows":[{"id":"10390","cell":["10390",
" MM23398A","***.REVISION NE PAS UTILISER","ECHANGEUR","Echangeurs complets
\u00e0 plaques","","","","","","0","1"]},{"id":"1","cell":["1","\"304010","Joint
arm\u00e9 NE PAS UTILISER voir Z304010","VANNE","Pi\u00e8ces d\u00e9tach\u00e9es 
de vannes","","","","54.00","","0","4"]},{"id":"13583","cell":["13583","#POMPES"
,"Article g\u00e9n\u00e9rique pompes.","POMPE","Pompes centrifuges compl\u00e8tes
PANTHER","","","","","","0","3"]},{"id":"3","cell":["3","#POMPES\/10944\/0001",
"","ECHANGEUR","Echangeurs complets \u00e0 plaques","","","","","","0","1"]},
{"id":"4","cell":["4","#POMPES\/10944\/0002","","ECHANGEUR","Echangeurs complets 
\u00e0 plaques","","","","","","0","1"]},{"id":"5","cell":["5","#POMPES\/10971
\/0003","Article g\u00e9n\u00e9rique pompes","POMPE","Pompes centrifuges compl
\u00e8tes PANTHER","","","","","","0","3"]}

(最後のセルは上で選択した行です)

ご覧のとおり、選択した行と編集フォーム ('S/famille') の情報は似ていません! これは、最初のリスト ボックスによっては、2 番目のリスト ボックスに適切な項目が取り込まれていないためです。

このリストを適切な項目で初期化するにはどうすればよいですか? フォーラムのいくつかの投稿によると、成功せずにいくつかの方法を試しました。

2013-04-05 更新

まず、これらのリスト ボックスの colModels :

            {name:'fam',index:'f.code', width:80,
            formoptions:{
                elmprefix:"<span style='visibility:hidden;'>&nbsp;&nbsp;(<span style='color:red;'>*</span>)&nbsp;</span>"
            },
            editable:true,
            edittype:'select',
            editoptions:{
                dataUrl:'selfam.php',
                dataEvents: [
                    {
                        type: 'change',
                        fn: function(e) {
                            $.ajax({
                                url:'selsfm.php?id='+$(e.target).val(),
                                async:false,
                                mType:'GET',
                                success:function(data){
                                    $("#tr_sfm select.FormElement").html(data);
                                }
                            });

                        }
                    }
                ]
            }
        }, 
        {name:'sfm',index:'s.code', width:80,
            formoptions:{
                elmprefix:"<span style='visibility:hidden;'>&nbsp;&nbsp;(<span style='color:red;'>*</span>)&nbsp;</span>"
            },
            editable:true,
            edittype:'select',
            cellattr: function (rowId, val, rawObject, cm, rdata) {
                return ' title="'+rawObject[13]+'"';
            }
        }, 

ボタンを編集するためのコードでは、最初に 2 番目のリスト ボックスを読み込むために rowdata から ID を取得し、ナビゲーション ボタンをクリックしたときに前/次の行から ID を取得します。

    myGrid.jqGrid('navGrid','#tab21p',{search:false,del:false}, 
    { // edit options
        width:500,
        modal:true,
        closeOnEscape:true,
        recreateForm: true,
        editCaption:"Modifier un ARTICLE",
        onInitializeForm: function(form) {
            rowdata = myGrid.jqGrid('getRowData',selectedId);
            id_fam=rowdata['fam_id'];
            id_sfm=rowdata['sfm_id'];
            $.ajax({
                url:'selsfm.php?id='+id_fam+'&edit',
                async:false,
                mType:'GET',
                success:function(data){
                    $("#tr_sfm select.FormElement").html(data);
                    $("#tr_sfm select.FormElement").val(id_sfm);
                }
            });
        },
        onclickPgButtons : function (whichbutton, formid, rowid) {
            var row = myGrid.jqGrid('getGridParam','selrow');
            if(whichbutton=='next'){row+=1;}else{row-=1;}
            rowdata = myGrid.jqGrid('getRowData',row);
            id_fam=rowdata['fam_id'];
            id_sfm=rowdata['sfm_id'];
        } 
    },
    {    // add options
        width:500,
        modal:true,
        closeOnEscape:true,
        recreateForm: true,
        addCaption:"Créer un ARTICLE",
        onInitializeForm: function(form) {
            id_fam=1;
            id_sfm=1;
            $.ajax({
                url:'selsfm.php?id='+id_fam+'&add',
                async:false,
                mType:'GET',
                success:function(data){
                    $("#tr_sfm select.FormElement").html(data);
                    $("#tr_sfm select.FormElement").val(id_sfm);
                }
            });
    },
    {}, //del options
    {} //search options
);  

最後に、メイン グリッドから行を選択するときに、rowdata から id を取得して 2 番目のリストを読み込みます。

    onSelectRow:function(id,status){
        selectedId=id;
        rowdata = myGrid.jqGrid('getRowData',id);
        id_fam=rowdata['fam_id'];
        id_sfm=rowdata['sfm_id'];
        $.ajax({
            url:'selsfm.php?id='+id_fam+'&select',
            async:false,
            mType:'GET',
            success:function(data){
                $("#tr_sfm select.FormElement").html(data);
                $("#tr_sfm select.FormElement").val(id_sfm);
            }
        });
    },

オレグさん、少し時間があれば見てください。このコードについてのコメントを教えていただきありがとうございます。あなたの経験を共有してくれてありがとう。良い1日を。ジヘル

2013-04-08 更新

オレグのコメントのいくつかを適用して、より明確なコードを取得できるようにしました。オレグに感謝します。あなたの経験に駆り立てられたことに感謝します。あなたのおかげで、私はますます jqGrid を愛しています。

  1. 「dataEvents」について、e.target でこれを使用するように言われた理由がわかりません。editoptions で使用できることを見てきましたが、あなたが何を意味するのかわかりません。
  2. 変数 'selectedId' は、行を編集して pgButtons で移動するときに使用されます。新しい行 ID を覚えていない場合、2 番目のリスト ボックスは更新されず、最初のボックスとは異なります。
  3. 新しい点として、フォームを有効にすると、サーバーに投稿されたすべてのペアが Firebug に表示されます。 ここに画像の説明を入力

ご覧のとおり、最初の要素は空白で値があり、2 番目のリスト ボックスの colName である「sfm」のように思えます。なぜこれが起こるのか、そしてそれを解決する方法を教えてください。

これらの継続的な質問であなたを悩ませないことを願っています. jqGrid のコーディングに関する知識を教えてくれる本が見つかりません。これがほぼ存在することを願っています。時間を割いていただきありがとうございます。良い1日を。ジヘル

4

1 に答える 1