0

jqgridを使用していて、その中にサブグリッドを1つ追加しました。これは、次のようになります。

ここに画像の説明を入力してください

ご覧のとおり、
列が11と13の行はメイングリッド行です

そして、すべての行に関心のあるサブグリッドがあります。[レコードの追加]要素には、[サブグリッドのポップアップの追加]が表示されます。

サブグリッドのコードは次のようになります。

subGridRowExpanded: function(subgrid_id, row_id) {
            var subgrid_table_id, pager_id;
            subgrid_table_id = subgrid_id+"_t";
            pager_id = "p_"+subgrid_table_id;
            $("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>");
            jQuery("#"+subgrid_table_id).jqGrid({
                url:"shops?q=2&ShopID="+row_id,
                datatype: "xml",
                colNames: ['Interest'],
                colModel: [
                    //{name:"Id",index:"ShopID",width:80,editable:false,editoptions:{readonly:false,size:40}}, //Shop ID not required
                    {name:"id",index:"id",editable:true,edittype:"select",editoptions:{dataUrl:'shops?q=3&ShopID='+row_id},editrules:{required:true}}
                ],
                rowNum:10,
                pager: pager_id,
                width: '100%',
                height: '100%',
                scrollOffset: 0,
                sortname: 'num',
                sortorder: "asc",
                height: '100%',
                editurl:'shops?q=5&ShopID='+row_id
            });
            jQuery("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{edit:false,add:true,del:true})
        },
        subGridRowColapsed: function(subgrid_id, row_id) {
            // this function is called before removing the data
            //var subgrid_table_id;
            //subgrid_table_id = subgrid_id+"_t";
            //jQuery("#"+subgrid_table_id).remove();
        }

問題は、サブグリッドに複数の要素がある場合はそれを選択できますが(最新バージョンのChromeを使用しています)、驚くべきことにサブグリッドに要素が1つしかない場合は選択できます(色の違いに気付いた場合はサブグリッド要素を参照してください) 'Gifts'-行13の下で選択)そして一度選択すると'Gifts'を削除できます。

更新: FirefoxとIEでは、最初の行のみがサブグリッドから選択されます

コードに何か問題がありますか?サブグリッドに複数の要素があるのに、なぜ単一の要素を選択できないのですか?

あなたの時間を感謝します、ありがとう

4

1 に答える 1

1

IDの重複に問題があると思います。idHTML では、同じ HTML ページで同じ値を持つ属性を使用することはできません。idすべての属性の値は一意である必要があります。Chrome/IE の Developer Tools を使用するか、Firebug を使用して、問題があることを確認することをお勧めします。グリッドとサブグリッドの要素でid現在持っている属性を調べるだけで済みます。<tr>

反対側では、jqGrid のすべての行(すべての要素) が割り当てられた属性になります。通常、 の応答でサーバー側に入力する必要があります。問題は、通常はデータベースの値を使用することですが、データベースのすべてのテーブルではなく、データベースの1 つのテーブルに対してのみ一意であることです。したがって、複数の jqGrid (またはサブグリッドを含むグリッド) が ID の重複を持つ行を取得するシナリオを簡単に作成できます。<tr>ididurlidid

問題を解決する最も簡単な方法は、私の提案のidPrefix後で jqGrid に導入されたオプションを使用することです。主な利点は、データベースにある元のid 値を引き続き使用し、jqGrid で属性を使用できることです。これは、サーバーから返された値から属性を構築するため、プレフィックスを使用して一意になります。答えで。したがって、すべてのサブグリッドに異なるものを使用することをお勧めします。たとえば、サブグリッドで使用できます(回答これを参照してください)。ididididPrefixesidPrefix: 's' + row_id + '_'

于 2012-10-11T12:50:31.123 に答える