jqGrid的其他行,当点击如何收行(jqGrid how to collapse row when

2019-08-20 07:19发布

在主电网,当我点击一行,它成为“突出”和七个子网格的显示。 这里是第一行被选中,并邻近要被编辑(正在进行的工作)的例子:

现在,如果我点击主电网的第二行,第一个是隐藏的,第二个选择。 我点击后编辑按钮,就会出现一个警告:不选择行!

如果我在第二行再次点击,它成为选中状态,我再次点击选择和编辑,运行正常! 所以,我相信,我的收缩和膨胀状态之间切换的代码是什么地方错了:

已更新2013-04-11

继奥列格的回答,我和我的程序的完整代码(限于30000):

jQuery(function ($) {
var resetAltRows = function () {
    $(this).children("tbody:first").children('tr.jqgrow').removeClass('myAltRowClass');
    $(this).children("tbody:first").children('tr.jqgrow').each(function(){
        var arbo=$(this).find('td:eq(0)').text().substr(0,1);
        $(this).addClass('myAltRowClass1'+arbo);
        if(arbo==1)$(this).find('td:eq(1) input:checkbox').attr('checked','checked');
    });
    $(this).children("tbody:first").children('tr.jqgrow:visible:odd').addClass('myAltRowClass');
};

var OldSelectedRow=null,
        height=$('body').height()-235,
        numRows=Math.floor(height/23)-(Math.floor(height/23)%5),
        heightRows=numRows*23,
        myGrid = $("#tab51");

//************************
//************************
//************************
myGrid.jqGrid({
    caption:"Liste des BONS DE TRAVAUX STANDARD",
    hidegrid:false,
    url:'opt511.php',
    datatype: "json",
    height:heightRows,
    rowNum:numRows,
    shrinkToFit:true,
    colNames:['Id','A.R.C.','B.T.','Date ARC','Client','Nom','Ville','Cde client','Matériel','Marque','Prest.','Description','N° série','Objet','X','b.type','idref'],
    colModel:[  
        {name:'b.id',index:'b.id', hidden:true,key:true}, 
        {name:'b.arc',index:'b.arc', width:60,align:'center',editable:true}, 
        {name:'b.ind',index:'b.ind', width:30,align:"center"},
        {name:'b.date_in',index:'b.date_in', width:70,align:"center"}, 
        {name:'c.code',index:'c.code', width:40}, 
        {name:'c.descr',index:'c.descr',width:200},
        {name:'c.ville',index:'c.ville', width:200}, 
        {name:'b.cde_clt',index:'b.cde_clt', width:150}, 
        {name:'q.code',index:'q.code', width:80}, 
        {name:'k.code',index:'k.code', width:80}, 
        {name:'b.nature',index:'b.nature', stype:'select',width:40,align:'center',
            searchoptions:{
                dataUrl:'sh51.php'
            },
            cellattr: function (rowId, val, rawObject, cm, rdata) {
                return 'title="' + rawObject[15] + '"';
            }
        }, 
        {name:'2m.descr',index:'2m.descr', width:200}, 
        {name:'p.numserie',index:'p.numserie', width:80}, 
        {name:'b.descr',index:'b.descr', width:200}, 
        {name:'clos',index:'clos', width:20,stype:'select',align:'center',sortable:false,
            searchrules:{date:true}, 
            search:true,
            searchoptions:{
                value:{"": "?", 0:"En cours", 1: "Clôturé"},
                defaultValue:0
            }
        }, 
        {name:'btype',index:'btype', width:40,hidden:true},
        {name:'idref',index:'btype', width:40,hidden:true}
    ], 
    postData: {
            filters:'{"groupOp":"AND","rules":['+
                            '{"field":"clos","op":"eq","data":"0"}]}'
    },
    search:true,
    pager: '#tab51p', 
    sortname: 'b.arc', 
    gridComplete:function(){
        OldSelectedRow=null;
        sortDataCol(this);,
    },
    onSelectRow:function(id,status){
        alert('begin = '+myGrid.jqGrid('getGridParam','selrow'));
        if(OldSelectedRow!=id){
            if(OldSelectedRow!=null){
                myGrid.jqGrid ('collapseSubGridRow', OldSelectedRow);
                $('#'+OldSelectedRow).removeClass('ui-state-highlight');
            }
            $('#'+id).addClass('ui-state-highlight');
            OldSelectedRow=id;
            myGrid.jqGrid('expandSubGridRow',id);
        }else{
            myGrid.jqGrid ('collapseSubGridRow', id);
            $('#'+id).removeClass('ui-state-highlight');
            OldSelectedRow=null;
        }
        alert('end = '+myGrid.jqGrid('getGridParam','selrow'));
    },
    subGrid: true,
    subGridRowExpanded: function(subgrid_id, row_id) {
        //*********************
        //  1ST SUBGRID
        //*********************
        var rowdata = myGrid.jqGrid('getRowData',row_id),
            btr=rowdata['b.id'],
            subgrid_table_id = subgrid_id+"_a", 
            pager_id = "p_"+subgrid_table_id; 
        $("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 
        $("#"+subgrid_table_id).jqGrid({ 
            url:"sg511a.php?id="+row_id+"&btr="+btr, 
            datatype: "json", 
            colNames: ['Nature','Information'],
            colModel: [ 
                {name:'c.code',index:'c.code', width:150,align:'right',sortable:false}, 
                {name:'p.coeff',index:'p.coeff', width:630,sortable:false}
            ], 
            height: '100%',
            autowidth:true,
            caption:'1 - INFORMATIONS CLIENT',
        }); 
        //*********************
        //  2ND SUBGRID 
        //*********************
        var clt=rowdata['c.code'],
            subgrid_table_id = subgrid_id+"_b", 
            pager_id = "p_"+subgrid_table_id; 
        $("#"+subgrid_id).append("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 
        $("#"+subgrid_table_id).jqGrid({ 
            url:"sg511b.php?id="+row_id+"&clt="+clt, 
            datatype: "json", 
            colNames: ['Id','X','Civilité','Nom','Prénom','Service'],
            colModel: [ 
                {name:'t.id',index:'t.id', width:60, align:"center",hidden:true}, 
                {name:'check',index:'check', width:20,sortable:false,formatter:'checkbox',align:'center',
                    editable: false, edittype: 'checkbox', editoptions: {value: "true:false", defaultValue: "false"}, 
                    formatoptions: {disabled: false}
                },
                {name:'v.code',index:'v.code', width:60,sortable:false},  
                {name:'t.nom',index:'t.nom', width:210,sortable:false}, 
                {name:'t.prenom',index:'t.prenom', width:210,sortable:false},
                {name:'f.descr',index:'f.descr', width:220,sortable:false}
            ], 
            pager: pager_id, 
            sortname: 't.nom',
            hiddengrid:true,
            scroll:true,
            maxheight: 230,
            autowidth:true,
            caption:'2 - PERSONNES A CONTACTER',
            gridComplete:function(){
                OldSelectedRow=null;
                sortDataCol(this);
                    }
        }); 
        $("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{search:false,add:false,edit:false,del:false});
        //*********************
        //  3TH SUBGRID 
        //*********************
        rowdata = myGrid.jqGrid('getRowData',row_id);
        var parc=rowdata['p.id'];
        var subgrid_table_id, pager_id; 
        subgrid_table_id = subgrid_id+"_c"; 
        pager_id = "p_"+subgrid_table_id; 
        $("#"+subgrid_id).append("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 
        $("#"+subgrid_table_id).jqGrid({ 
            url:"sg511c.php?id="+row_id+"&parc="+parc, 
            datatype: "json", 
            colNames: ['Id','Ensemble','Quantité','Article','Désignation','Matière'],
            colModel: [ 
                {name:'a.id',index:'a.id', width:60, align:"center",hidden:true}, 
                {name:'c.code',index:'c.code', width:100}, 
                {name:'p.coeff',index:'p.coeff', width:60,align:"center"}, 
                {name:'a.code',index:'a.code', width:80}, 
                {name:'a.descr',index:'a.descr',width:400},
                {name:'m.code',index:'m.code', width:80}
            ], 
            pager: pager_id, 
            sortname: 'c.code', 
            sortorder: "asc", 
            hiddengrid:true,
            rownumbers: true, 
            rownumWidth: 40, 
            gridview: true,
            scroll:true,
            maxheight: 230,
            autowidth:true,
            onSortCol: function (index, idxcol, sortorder) {
                //  montre la colonne sélectionnée pour le tri de la grille
                if (this.p.lastsort >= 0 && this.p.lastsort !== idxcol
                                && this.p.colModel[this.p.lastsort].sortable !== false) {
                        $(this.grid.headers[this.p.lastsort].el).find(">div.ui-jqgrid-sortable>span.s-ico").show();
                        $(this.grid.headers[this.p.lastsort].el).removeClass('ui-state-active');
                }
                $(this.grid.headers[idxcol].el).addClass('ui-state-active');
            },
            altRows:true,
            altclass:'myAltRowClass',
            viewrecords: true,
            caption:'3 - SPECIFICATIONS TECHNIQUES',
            emptyrecords: 'Aucune donnée correspondante...',
        });
        //*********************
        //  4TH SUBGRID 
        //*********************
        rowdata = myGrid.jqGrid('getRowData',row_id);
        var parc=rowdata['idref'];
        var subgrid_table_id, pager_id; 
        subgrid_table_id = subgrid_id+"_d"; 
        pager_id = "p_"+subgrid_table_id; 
        $("#"+subgrid_id).append("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 
        $("#"+subgrid_table_id).jqGrid({ 
            url:"sg511d.php?id="+row_id+"&parc="+parc, 
            datatype: "json", 
            colNames: ['Id','Ensemble','Quantité','Article','Désignation','Matière'],
            colModel: [ 
                {name:'a.id',index:'a.id', width:60, align:"center",hidden:true}, 
                {name:'c.code',index:'c.code', width:100}, 
                {name:'p.coeff',index:'p.coeff', width:60,align:"center"}, 
                {name:'a.code',index:'a.code', width:80}, 
                {name:'a.descr',index:'a.descr',width:400},
                {name:'m.code',index:'m.code', width:80}
            ], 
            pager: pager_id, 
            sortname: 'c.code', 
            sortorder: "asc", 
            hiddengrid:true,
            rownumbers: true, 
            rownumWidth: 40, 
            gridview: true,
            scroll:true,
            maxheight: 230,
            autowidth:true,
            onSortCol: function (index, idxcol, sortorder) {
                //  montre la colonne sélectionnée pour le tri de la grille
                if (this.p.lastsort >= 0 && this.p.lastsort !== idxcol
                                && this.p.colModel[this.p.lastsort].sortable !== false) {
                        $(this.grid.headers[this.p.lastsort].el).find(">div.ui-jqgrid-sortable>span.s-ico").show();
                        $(this.grid.headers[this.p.lastsort].el).removeClass('ui-state-active');
                }
                $(this.grid.headers[idxcol].el).addClass('ui-state-active');
            },
            altRows:true,
            altclass:'myAltRowClass',
            viewrecords: true,
            caption:'4 - PIECES A PREPARER',
            emptyrecords: 'Aucune donnée correspondante...',
            gridComplete:function(){
                colModel = $("#"+subgrid_id+'_d').jqGrid('getGridParam', 'colModel');
                sortName =$("#"+subgrid_id+'_d').jqGrid('getGridParam', 'sortname');
                $('#gbox_' + $.jgrid.jqID($("#"+subgrid_id+'_d')[0].id) +
                        ' tr.ui-jqgrid-labels th.ui-th-column').each(function (i) {
                        var cmi = colModel[i], colName = cmi.name;
                        if (cmi.sortable !== false) {
                                $(this).find('>div.ui-jqgrid-sortable>span.s-ico').show();
                        } else if (!cmi.sortable && colName !== 'rn' && colName !== 'cb' && colName !== 'subgrid') {
                                $(this).find('>div.ui-jqgrid-sortable').css({cursor: 'default'});
                        }
                        if (cmi.name === sortName) {
                                $(this).addClass('ui-state-active');
                                //alert(i);
                                var gridId = $("#"+subgrid_id+'_d').jqGrid('getDataIDs');
                                for (var countRow = 0; countRow < gridId .length; countRow ++)
                                {
                                    var rowId = gridId [countRow ];
                                    var dataFromTheRow = $("#"+subgrid_id+'_d').jqGrid ('getRowData', rowId);
                                    $("#"+subgrid_id+'_d').jqGrid('setCell',rowId, i, '','ui-widget-header');
                                    $("#"+subgrid_id+'_d').jqGrid('setCell',rowId, i, '',{'border-top':0,'border-left':0});
                                }
                        }
                });
            },
        }); 
        $("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{search:false,add:false,edit:false,del:false});
        //*********************
        //  5TH SUBGRID 
        //*********************
        rowdata = myGrid.jqGrid('getRowData',row_id);
        var btr=rowdata['b.id'],lastId='';
        var prest=rowdata['btype'];
        var nature=rowdata['b.nature'];
        var subgrid_table_id, pager_id; 
        subgrid_table_id = subgrid_id+"_e"; 
        pager_id = "p_"+subgrid_table_id; 
        $("#"+subgrid_id).append("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 
        $("#"+subgrid_table_id).jqGrid({ 
            url:"sg511e.php?id="+row_id+"&btr="+btr, 
            datatype:"json",
            mType:'POST',
            loadui: "disable",
            colNames:['id','Prestations','Radio','Checked','Disabled','Select','Informations'],
            colModel:[
                    {name:'id',index:'id',width:100,hidden:true},
                    {name:'name',index:'name',width:550,sortable:false,
                        formatter: function (cellvalue,options,rowObject) {
                            if(rowObject.radio.length==0){
                                if(rowObject.id.substr(0,1)=='1'){
                                    var check="checked='checked'";
                                }else{
                                    var check='';
                                }
                                if(rowObject.disabled>'0'){
                                    var disabled="disabled";
                                }else{
                                    var disabled='';
                                }
                                var box="<input type='checkbox' class='itmchk' "+check+" "+disabled+"/>";
                            }else{
                                var box="<input type='radio' class='itmrad' id='"+rowObject.radio+"' name='"+rowObject.radio+"' "+(rowObject.checked>0?'checked':'')+" />";
                            }
                            switch(rowObject.level){
                                case '0':
                                    var bstyle="<strong>", estyle="</strong>";
                                    break;
                                case '1':
                                    var bstyle="", estyle="";
                                    break;
                                default:
                                    var bstyle="<em>", estyle="</em>";
                            }
                            return box + bstyle + $.jgrid.htmlEncode(cellvalue) + estyle;
                        }
                    },
                    {name:'radio',index:'radio',width:30,sortable:false,hidden:true},
                    {name:'checked',index:'checked',width:30,sortable:false,hidden:true},
                    {name:'disabled',index:'disabled',width:30,sortable:false,hidden:true},
                    {name:'select',index:'select',width:200,sortable:false,hidden:true},
                    {name:'data',index:'data',width:230,sortable:false,
                        formatter: function (cellvalue,options,rowObject) {
                            var cell='';
                            if(rowObject.select>" "){
                                var tab=rowObject.select.split("|");
                                var id=rowObject.id.substr(0,1);
                                cell="<select class='itmsel'>";
                                for(var i=0;i<tab.length;i++){
                                    var fld=tab[i].split(';');
                                    var opt="<option value='"+fld[0]+"' class='myAltRowClass1"+id+"'";
                                    if(i==0){
                                        opt+=" style='font-style:italic;'";
                                    }else{
                                        opt+=" style='color:red;'";
                                    }
                                    opt+=">"+(i>0?'&nbsp;&nbsp;• ':'')+fld[1]+"</option>";
                                    cell+=opt;
                                }
                                cell+='</select>';
                            }
                            return cell;
                        }
                    }
            ],
            sortname: 'id', 
            sortorder: "asc", 
            hiddengrid:true,
            gridview: true,
            treeGrid:true,
            pager:pager_id,
            treeGridModel: "adjacency",
            treedatatype: 'json',
            ExpandColumn: 'name',
            jsonReader: {
                    repeatitems: false,
                    root: function (obj) { return obj; },
                    page: function (obj) { return 1; },
                    total: function (obj) { return 1; },
                    records: function (obj) { return obj.length; }
            },
            scroll:true,
            autowidth:true,
            height: 230,
            loadComplete: function() {
                var grid = this;
                resetAltRows.call(this);
                $(this).find('tr.jqgrow td div.treeclick').click(function(){
                        resetAltRows.call(grid);
                });
                $(this).find('tr.jqgrow td span.cell-wrapper').click(function(){
                        resetAltRows.call(grid);
                });
                $("#"+subgrid_table_id).jqGrid('setLabel', 'name', '<b>'+nature+' - '+prest+'</b>');
                //
            },
            beforeSelectRow: function (rowid, e) {
                var $this = $(this),
                isLeafName = $this.jqGrid("getGridParam", "treeReader").leaf_field,
                localIdName = $this.jqGrid("getGridParam", "localReader").id,
                localData,
                state,
                setCheckedStateOfChildrenItems = function (children) {
                    $.each(children, function () {
                        $("#" + this[localIdName] + " input.itmchk").prop("checked", state);
                        if (!this[isLeafName]) {
                            setCheckedStateOfChildrenItems($this.jqGrid("getNodeChildren", this));
                        }
                    });
                };
                if (e.target.nodeName === "INPUT" && $(e.target).hasClass("itmchk")) {
                    state = $(e.target).prop("checked");
                    localData = $this.jqGrid("getLocalRow", rowid);
                    setCheckedStateOfChildrenItems($this.jqGrid("getNodeChildren", localData), state);
                }
            },
            onSortCol: function (index, idxcol, sortorder) {
                //  montre la colonne sélectionnée pour le tri de la grille
                if (this.p.lastsort >= 0 && this.p.lastsort !== idxcol
                                && this.p.colModel[this.p.lastsort].sortable !== false) {
                        $(this.grid.headers[this.p.lastsort].el).find(">div.ui-jqgrid-sortable>span.s-ico").show();
                        $(this.grid.headers[this.p.lastsort].el).removeClass('ui-state-active');
                }
                $(this.grid.headers[idxcol].el).addClass('ui-state-active');
            },
            caption:'5 - TRAVAUX A EFFECTUER',
        }); 
        $("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{search:false,add:false,edit:false,del:false});
        //*********************
        //  6TH SUBGRID 
        //*********************
        rowdata = myGrid.jqGrid('getRowData',row_id);
        var parc=rowdata['p.id'];
        var subgrid_table_id, pager_id; 
        subgrid_table_id = subgrid_id+"_f"; 
        pager_id = "p_"+subgrid_table_id; 
        $("#"+subgrid_id).append("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 
        $("#"+subgrid_table_id).jqGrid({ 
            url:"sg511f.php?id="+row_id+"&parc="+parc, 
            datatype: "json", 
            colNames: ['Id','Ensemble','Quantité','Article','Désignation','Matière'],
            colModel: [ 
                {name:'a.id',index:'a.id', width:60, align:"center",hidden:true}, 
                {name:'c.code',index:'c.code', width:100}, 
                {name:'p.coeff',index:'p.coeff', width:60,align:"center"}, 
                {name:'a.code',index:'a.code', width:80}, 
                {name:'a.descr',index:'a.descr',width:400},
                {name:'m.code',index:'m.code', width:80}
            ], 
            pager: pager_id, 
            sortname: 'c.code', 
            sortorder: "asc", 
            hiddengrid:true,
            rownumbers: true, 
            rownumWidth: 40, 
            gridview: true,
            scroll:true,
            maxheight: 230,
            autowidth:true,
            onSortCol: function (index, idxcol, sortorder) {
                //  montre la colonne sélectionnée pour le tri de la grille
                if (this.p.lastsort >= 0 && this.p.lastsort !== idxcol
                                && this.p.colModel[this.p.lastsort].sortable !== false) {
                        $(this.grid.headers[this.p.lastsort].el).find(">div.ui-jqgrid-sortable>span.s-ico").show();
                        $(this.grid.headers[this.p.lastsort].el).removeClass('ui-state-active');
                }
                $(this.grid.headers[idxcol].el).addClass('ui-state-active');
            },
            altRows:true,
            altclass:'myAltRowClass',
            viewrecords: true,
            caption:'6 - INTERVENANTS',
            emptyrecords: 'Aucune donnée correspondante...',
        }); 
        $("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{search:false,add:false,edit:false,del:false});
        $("#"+subgrid_table_id).jqGrid('filterToolbar',{stringResult: true,searchOnEnter : false});
        //  montre la colonne triée au chargement des données
        colModel = $("#"+subgrid_table_id).jqGrid('getGridParam', 'colModel');
        sortName = $("#"+subgrid_table_id).jqGrid('getGridParam', 'sortname');
        $('#gbox_' + $.jgrid.jqID($("#"+subgrid_table_id)[0].id) +
                ' tr.ui-jqgrid-labels th.ui-th-column').each(function (i) {
                var cmi = colModel[i], colName = cmi.name;
                if (cmi.sortable !== false) {
                        $(this).find('>div.ui-jqgrid-sortable>span.s-ico').show();
                } else if (!cmi.sortable && colName !== 'rn' && colName !== 'cb' && colName !== 'subgrid') {
                        $(this).find('>div.ui-jqgrid-sortable').css({cursor: 'default'});
                }
                if (cmi.name === sortName) {
                        $(this).addClass('ui-state-active');
                }
        });
        //*********************
        //  7TH SUBGRID 
        //*********************
        rowdata = myGrid.jqGrid('getRowData',row_id);
        var parc=rowdata['p.id'];
        var subgrid_table_id, pager_id; 
        subgrid_table_id = subgrid_id+"_g"; 
        pager_id = "p_"+subgrid_table_id; 
        $("#"+subgrid_id).append("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 
        $("#"+subgrid_table_id).jqGrid({ 
            url:"sg511g.php?id="+row_id+"&parc="+parc, 
            datatype: "json", 
            colNames: ['Id','Ensemble','Quantité','Article','Désignation','Matière'],
            colModel: [ 
                {name:'a.id',index:'a.id', width:60, align:"center",hidden:true}, 
                {name:'c.code',index:'c.code', width:100}, 
                {name:'p.coeff',index:'p.coeff', width:60,align:"center"}, 
                {name:'a.code',index:'a.code', width:80}, 
                {name:'a.descr',index:'a.descr',width:400},
                {name:'m.code',index:'m.code', width:80}
            ], 
            pager: pager_id, 
            sortname: 'c.code', 
            sortorder: "asc", 
            hiddengrid:true,
            rownumbers: true, 
            rownumWidth: 40, 
            gridview: true,
            scroll:true,
            maxheight: 230,
            autowidth:true,
            onSortCol: function (index, idxcol, sortorder) {
                //  montre la colonne sélectionnée pour le tri de la grille
                if (this.p.lastsort >= 0 && this.p.lastsort !== idxcol
                                && this.p.colModel[this.p.lastsort].sortable !== false) {
                        $(this.grid.headers[this.p.lastsort].el).find(">div.ui-jqgrid-sortable>span.s-ico").show();
                        $(this.grid.headers[this.p.lastsort].el).removeClass('ui-state-active');
                }
                $(this.grid.headers[idxcol].el).addClass('ui-state-active');
            },
            altRows:true,
            altclass:'myAltRowClass',
            viewrecords: true,
            caption:'7 - PLAN DE PREVENTION',
            emptyrecords: 'Aucune donnée correspondante...',
        }); 
        $("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{search:false,add:false,edit:false,del:false});
        $("#"+subgrid_table_id).jqGrid('filterToolbar',{stringResult: true,searchOnEnter : false});
        var subgridg="#"+subgrid_id;
        //  #tab_51_1;
        var chaine='abcdefg';
        $(".ui-jqgrid-titlebar",subgridg).click(function(){
            var titlebar=this;
            var clicked=chaine.indexOf($(titlebar).parent().attr('id').substr(-1));
            //  id is 'tab51_1_a' so clicked is 0
            var depart=$(titlebar).parent().parent().parent().attr('id');
            //  I run my search from id 'tab51_1' class 'tablediv'
            $('#'+depart).find('.ui-jqgrid-view').each(function(idx){
                if(idx==clicked){
                    $(".ui-jqgrid-titlebar-close", titlebar).click();
                }else{
                    if(typeof $(subgridg).find('.ui-jqgrid-bdiv:eq('+idx+')').css('display')=='undefined'||$(subgridg).find('.ui-jqgrid-bdiv:eq('+idx+')').css('display')=='block'){
                        $(subgridg).find(".ui-jqgrid-titlebar-close:eq("+idx+")").click();
                    }
                }
            });
        });
    },
    subGridRowColapsed: function(subgrid_id, row_id) { 
        $("#"+subgrid_id+"_a").remove();
        $("#"+subgrid_id+"_b").remove();
        $("#"+subgrid_id+"_c").remove();
        $("#"+subgrid_id+"_d").remove();
        $("#"+subgrid_id+"_e").remove();
        $("#"+subgrid_id+"_f").remove();
        $("#"+subgrid_id+"_g").remove();
        myGrid.jqGrid('resetSelection');            
    }
});});

在那里我,所以我认为这是错误的reloadOnExpand的默认值不使用任何subGridOptions。 我在OnSelectedRow功能2警报添加,在开始和结束的功能。 第一次单击显示效果细腻selrows的开始和结束,但下一次点击,结束警报显示“空”。

我曾尝试也全部删除部分纳入“subGridRowExpanded”和“subGridRowColapsed”功能。 麻烦不会发生,开始和结束selrows是很好,因为我想我可以编辑一行。

jqGrid的内部运作看起来很对我的复杂我不习惯用它来工作,我得感谢你一次为你花帮菜鸟如我所有的时间。 你永远是对的你的意见,我希望你将是很长一段时间在这个论坛。 再次感谢。 祝你今天愉快。 JiheL

已更新2013年4月22日

将一切都表明从奥列格后,我做我的应用程序的20名的脚本一些变化,而这一切都建立在相同的方式。 对于这个问题,这里是onSelectRow我改变了小部分:

    onSelectRow:function(id){
        var expanded = $("td.sgexpanded", myGrid)[0];
        if(expanded){
            $(expanded).trigger("click").parent().removeClass('ui-state-highlight');                
        }
        myGrid.jqGrid('expandSubGridRow',id);
        $('#'+id).addClass('ui-state-highlight');
        alert(id+' '+myGrid.jqGrid('getGridParam','selrow'));
    },

但没有更多的运气的结果,我不能编辑已倒塌等一行之后被扩展一行。 我不明白为什么selrow后崩溃旧行的变化,扩大选择行。 我希望有人可以把我这个麻烦了,我觉得我并不孤单,以满足这个问题。 提前对你的帮助非常感谢,非常感谢。 JiheL

已更新2013年4月23日

应用奥列格的建议的主要问题后(折叠后的其他编辑扩展行)似乎得到解决。 但选择行设置为网格的顶部运行良好有五个第一排,但不能与以下行。 奇怪! 这是事实的快照:

奇怪,因为在演示http://jsfiddle.net/jihel/JMcKF/运行良好,并已与我的应用程序代码中创建! 我在寻找什么可以是错误的或改变scrollTop的,如果有人已经遇到了这样的麻烦,并有解决,你的帮助非常感谢的想法。 祝你今天愉快

Answer 1:

这是很难分析这么长的代码。 所以我张贴只是,我可以在代码中看到我通过它看了之后可能出现的问题的一些意见。

主要的问题,我看到: 你应该使用idPrefix在所有子网格选项 (或主网和子网格)。 值idPrefix选项的选择应取决于rowid其中亚格将被打开。 例如,你可以使用

idPrefix: "s_" + row_id + "_a_"

用于第一亚栅格, idPrefix: "s_" + row_id + "_b_"用于第二次网格等等。

我建议你不要使用. (点)或任何其他元字符在列名 。 这是一个在你的代码和jqGrid的的代码中潜在的错误根源。 你应该明白,在name属性将被用来建立jqGrid的内部的一些元素的ID属性。 有在CSS一些限制哪些字符允许在id属性。 另外的jqGrid必须建立选择,以获得从页面对应的元素。 比如$("#" + rowid)将如果是错误的选择rowid包含. 因为选择器("#ab")将被解释为:与元件id=a和类b代替id="ab" 。 jqGrid的旧版本不具有这样的id和名字等工作都没有。 最近的jqGrid的版本应该工作,但是元字符在IDS仍然使用增加了代码的复杂性在许多时间。 你真的需要它吗?

因为几乎同样的问题,我不建议你使用相同name属性不同的表。 如果你打算使用的搜索过滤器用于多个网格或子网格(使用这可能是重要的filterToolbar多个网格)。 目前,使用'c.code'例如在多个子网格这是未来的问题的潜在根源。

如果你真的需要使用. 用于搜索和使用datatype: "json"loadonce: true那么你可以使用index拥有.name它没有. 。 例如,你可以使用name: 'b_id', index: 'b.id' 。 如果你使用index值相同的值name属性,建议删除 index从列定义属性。

此外,我将不推荐使用scroll:true的jqGrid的选项。 一般来说虚拟滚动是不错的功能,但在我看来虚拟滚动实施有许多错误ABD副作用。 因此,我建议不要使用它。 如果你真的很难需要的功能,那么你应该在表单中使用它scroll:1 ,你必须在调试投入更多的时间。

最后一句话:我不推荐的使用gridComplete 。 我建议使用loadComplete代替。 见答案的更多细节。

最后一句话:我建议使用gridview: true中的所有网格和您使用的子网格。

更新 :我不知道,我完全理解你想实现的是什么行为onSelectRow ,但下面的实现

onSelectRow: function (rowid) {
    var $self = $(this),
        $this = $("#" + $.jgrid.jqID(rowid)), // the row
        $expanded = $self.find("td.sgexpanded");

     if ($expanded.length > 0) {
         $expanded.trigger("click");
     }
     $self.jqGrid("expandSubGridRow", rowid);
     $self.jqGrid("setSelection", rowid, false);
     $this.closest(".ui-jqgrid-bdiv").scrollTop($this.position().top);
}


文章来源: jqGrid how to collapse row when clicking on other row