2015-04-20 16 views
15

Ich habe eine jqGrid mit zwei Teilnetzen und eine groupingView(), wenn meine Daten vom Server in das Netz geladen wird mein subgrid nicht erweitern will. Nur wenn ich page oder klicken Sie auf die Schaltfläche Aktualisieren wird das Untergitter erweitert, oder wenn ich loadonce: false oder nehmen Sie die groupView() wird es erweitern und alles funktioniert gut, aber dann wird mein Export zu Excel nicht angezeigt irgendwelche Daten. Ich möchte, dass mein Untergitter erweitert wird, wenn die Daten zum ersten Mal geladen werden, nicht nachdem ich aktualisiert oder die Seite neu geladen habe.jqGrid Subgrid nicht beim ersten Laden erweitert

Ich habe versucht:

$MyGrid.jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); 

und versuchte auch, einen Auslöser zu machen auf Loadcomplete den Refresh-Button Feuer()

*$(".ui-icon-refresh").each(function() { 
    $(this).trigger("click"); 
     });* 

Dieser Trigger-Taste funktioniert, wenn es angeklickt wird , aber es wird nicht ausgelöst automatisch im Loadcomplete() Funktion.

Hier ist mein Javascript:

function CreateOrdSummaryTable() 
      { 
      if ($("#DataTab_2").length === 0) 
      { 
       $("#tdBotRight").html("<table id='DataTab_2' class='dataContent' border='1' align='top'></table>" + 
          "<div id='PagerDataTab_2'></div>"); 
      } 

      var $tableOrdSummary = $("#DataTab_2");  

      $tableOrdSummary.jqGrid({ 
       url: '/Ord/WS/OrderWebSummary.php',    
       colNames: ["Sum of Order Mass","Customer", "Case", "Associated Mass" ,"Order Mass","Invoiced Mass","Shipped Mass","FGI Mass"], 
       colModel: [     
       { name: "ORDITM", index: "ORDITM", resizable: true, width: 120}, 
       { name: "CUSTOMER", index: "CUSTOMER", resizable: true, width: 250}, 
       { name: "CASES", index: "CASES", summaryTpl: "<i>Order Group Total:</i>", summaryType: "sum", resizable: true, width: 250},     
       { name: "ASSMASS", index: "ASSMASS", summaryTpl: "<i>{0}</i>", summaryType: "sum", resizable: true, width: 165, formatter: "integer"},     
       { name: "ORDMASS", index: "ORDMASS", summaryTpl: "<i>{0}</i>", summaryType: "sum", resizable: true, width: 115, formatter: "integer"}, 
       { name: "DIST", index: "DIST", summaryTpl: "<i>{0}</i>", summaryType: "sum", resizable: true, width: 130, formatter: "integer"}, 
       { name: "WIP", index: "WIP", summaryTpl: "<i>{0}</i>", summaryType: "sum", resizable: true, width: 130, formatter: "integer"}, 
       { name: "MDB", index: "MDB", summaryTpl: "<i>{0}</i>", summaryType: "sum", resizable: true, width: 110, formatter: "integer"}    
       ], 
       pager: jQuery("#PagerDataTab_2"), 
       shrinkToFit: false, 
       autoWidth: false, 
       caption: "Order Summary", 
       height: "100%", 
       rowNum: 1000,  
       //rowList: [50,100,200], 
       loadonce: false, //This is to get the Paging to turn on if set to (true) 
       gridview: true,        
       footerrow: true, 
       userDataOnFooter: true, 
       grouping : true,    
       groupingView : { 
        groupField : ["ORDITM"], 
        groupColumnShow : [true], 
        groupText: [ // user the name of a column with curly braces to use it in a summary expression. 
           // {0} is the formula placeholder for the column (defined by the summaryType property 
           "<i><b>{0} - {1} Order(s)</b></i>" 
           ], 
        showSummaryOnHide: true, 
        groupSummary : [true], 
        groupCollapse : false     
       }, 
     loadComplete: function() { 
     var AssSum = parseInt($tableOrdSummary.jqGrid('getCol', 'ASSMASS', false, 'sum')); 
     var OrdSum = parseInt($tableOrdSummary.jqGrid('getCol', 'ORDMASS', false, 'sum'));    
     var InvSum = parseInt($tableOrdSummary.jqGrid('getCol', 'DIST', false, 'sum')); 
     var ShpSum = parseInt($tableOrdSummary.jqGrid('getCol', 'WIP', false, 'sum')); 
     var FGISum = parseInt($tableOrdSummary.jqGrid('getCol', 'MDB', false, 'sum'));  
     $tableOrdSummary.jqGrid('footerData', 'set', 
     { 
      CASES: '<i><b>Grand Total:</b></i>', 
      ASSMASS: AssSum, 
      ORDMASS: OrdSum, 
      DIST: InvSum, 
      WIP: ShpSum, 
      MDB: FGISum 
     }); 
     },  
     postData: { 
     "GroupID": function() { 
       return groupID(); 
       } 
      },    
     subGrid: true,   
     subGridOptions: { 
      "plusicon" : "ui-icon-triangle-1-e", 
      "minusicon" : "ui-icon-triangle-1-s", 
      "openicon" : "ui-icon-arrowreturn-1-e", 
      "expandOnLoad" : false, 
      "reloadOnExpand" : true, 
      "selectOnExpand" : true 
     },  
     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:"/Ord/WS/OrderItemSummary.php",  
      datatype: "json", 
       colNames: ["Item", "RFD Date","Associated Mass", "Order Mass", "Invoiced Mass", "Shipped Mass", "FGI Mass"], 
       colModel: [      
       { name: "ITEM", index: "ITEM", resizable: true, width: 60},     
       { name: "RFDDATE", index: "RFDDATE", summaryTpl : "<i>Total:</i>", summaryType: "sum", resizable: true, width: 135},    
       { name: "ASSMASS", index: "ASSMASS", summaryTpl: "<i>{0}</i>", summaryType: "sum", resizable: true, width: 180, formatter: "integer"},     
       { name: "ORDMASS", index: "ORDMASS", summaryTpl: "<i>{0}</i>", summaryType: "sum", resizable: true, width: 115, formatter: "integer"}, 
       { name: "DIST", index: "DIST", summaryTpl: "<i>{0}</i>", summaryType: "sum", formatter: "integer", resizable: true, width: 130}, 
       { name: "WIP", index: "WIP", summaryTpl: "<i>{0}</i>", summaryType: "sum", formatter: "integer", resizable: true, width: 130}, 
       { name: "MDB", index: "MDB", summaryTpl: "<i>{0}</i>", summaryType: "sum", formatter: "integer", resizable: true, width: 115}    
       ], 
      rowNum:50, 
      pager: pager_id, 
      shrinkToFit: false, 
      autoWidth: false,   
      height: '100%', 
      caption: "Item Summary", 
//    footerrow: true, 
//    userDataOnFooter: true,   
       grouping : true,    
       groupingView : { 
        groupField : ["ITEM"], 
        groupColumnShow : [false], 
        groupText: [ // user the name of a column with curly braces to use it in a summary expression. 
           // {0} is the formula placeholder for the column (defined by the summaryType property 
           "<i><b>Item(s): {0}</b></i>" 
           ], 
        groupOrder: ["asc"], 
        groupSummary : [true], 
        groupCollapse : false, 
        groupDataSorted : true 
       }, 
     loadComplete: function() { 
//   var InvSum = parseInt(jQuery("#"+subgrid_table_id).jqGrid('getCol', 'DIST', false, 'sum')); 
//   var ShpSum = parseInt(jQuery("#"+subgrid_table_id).jqGrid('getCol', 'WIP', false, 'sum')); 
//   var FGISum = parseInt(jQuery("#"+subgrid_table_id).jqGrid('getCol', 'MDB', false, 'sum')); 
//   var AssSum = parseInt(jQuery("#"+subgrid_table_id).jqGrid('getCol', 'ASSMASS', false, 'sum')); 
//   var OrdSum = parseInt(jQuery("#"+subgrid_table_id).jqGrid('getCol', 'ORDMASS', false, 'sum'));   
//   jQuery("#"+subgrid_table_id).jqGrid('footerData', 'set', 
//   { 
//   RFDDATE: '<i><b>Grand Total:</b></i>', 
//   ASSMASS: AssSum, 
//   ORDMASS: OrdSum, 
//   DIST: InvSum, 
//   WIP: ShpSum, 
//   MDB: FGISum 
//   }); 

     },  
      postData: { 
     "GroupRwID": function() { 
     var myString = onRowSelected(row_id); 
     var finalString = groupRowID() + myString; 
     //console.log(finalString); 
     return finalString; 
       } 
      }, 
     subGrid: true,   
     subGridOptions: { 
      "plusicon" : "ui-icon-triangle-1-e", 
      "minusicon" : "ui-icon-triangle-1-s", 
      "openicon" : "ui-icon-arrowreturn-1-e", 
      "expandOnLoad" : false, 
      "reloadOnExpand" : true, 
      "selectOnExpand" : true 
     },  
     subGridRowExpanded: function(subgrid2_id, row2_id) { 
     var subgrid_table_id2, pager_id2; 
     subgrid_table_id2 = subgrid2_id + "_t"; 
     pager_id = "p_" + subgrid_table_id2; 
     $("#"+subgrid2_id).html("<table id='"+subgrid_table_id2+"' class='scroll'></table><div id='"+pager_id2+"' class='scroll'></div>"); 
     jQuery("#"+subgrid_table_id2).jqGrid({ 
      url:"/Ord/WS/OrderCaseSummary.php",  
      datatype: "json", 
       colNames: ["Case", "Associated Mass"], 
       colModel: [ 
       { name: "CASES", index: "CASES", summaryTpl : "<i>Total:</i>", summaryType: "sum", key: true, resizable: true, width: 130},     
       { name: "ASSMASS", index: "ASSMASS", summaryTpl: "<i>{0}</i>", summaryType: "sum", resizable: true, width: 180, formatter: "integer"}       
       ], 
      rowNum:50, 
      pager: pager_id, 
      shrinkToFit: false, 
      autoWidth: false,   
      height: '100%', 
      caption: "Cases Summary",    
      postData: { 
     "CaseSum": function() { 
     var selRwData = '"CASES":"' + cases + '",' + '"ORDITM":"' + ordItm + '",' + '"CUSTOMER":"' + customer + '",' + '"ASSMASS":"' + assMass + '"' +"}"; 
     var finalStr = groupRowID() + selRwData; 
     return finalStr; 
       } 
      }   
     });   
     $('#'+subgrid_table_id2).addClass("subGrids"); 
     }    
     });   
     $('#'+subgrid_table_id).addClass("subGrids"); 
     }  
      }); 

     $tableOrdSummary.jqGrid("navGrid","#PagerDataTab_2", 
     {edit:false,add:false,del:false, refreshstat:"current"}, 
     {}, 
     {}, 
     {}, 
     {multipleSearch:false, multipleGroup:false, showQuery: false} 
     ); 
} 

     function ordSummaryView() 
     { 
     $("#DataTab_2").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); //This makes the call to refresh the grid. 
     } 

     function onRowSelected(rowId) 
     { 
     var $tableOrdSummary = $("#DataTab_2"); 
     var rowData = $tableOrdSummary.jqGrid ('getRowData', rowId); 
     cases = rowData.CASES; 
     customer = rowData.CUSTOMER; 
     assMass = rowData.ASSMASS; 
     ordItm = rowData.ORDITM; 

     var selRwData = '"CASES":"' + cases + '",' + '"ORDITM":"' + ordItm + '",' + '"CUSTOMER":"' + customer + '",' + '"ASSMASS":"' + assMass + '"' +"}"; 

     return selRwData; 
     } 

     function getTotals() 
     { 
     var $tableOrdSummary = $("#DataTab_2"); 
     ids = $tableOrdSummary.jqGrid('getDataIDs'); 
     int = 0; 
     for (var i = 0; i < ids.length; i++) 
     { 
      var rowId = ids[i]; 
      var rowData = $tableOrdSummary.jqGrid ('getRowData', rowId); 

      var distTotal = rowData.DIST; 
      int += parseInt(distTotal); 
     } 
     return int; 
     } 

     $(document).ready(function() 
     { 
     CreateOrdSummaryTable(); 

     }); 

Funktion für GroupRowID():

function groupRowID() 
    { 

    var jsonSearchString = ""; 
    var sGroupId = <?php echo "'" . $sGroupId . "'" ; ?>; 
    jsonSearchString = '"GROUPID":"' + sGroupId + '",'; 
    return "{" + jsonSearchString; 
    } 
+1

** Welche Version von jqGrid verwenden Sie? **. Entschuldigung, aber viele Dinge sind in deinem Code unklar. Ist "# tdBotRight" auf der Seite zu Beginn vorhanden oder Sie generieren es und platzieren es dynamisch? Warum enthält Ihr Code das äußere '{...}'? Der Code '$ ("# DataTab_2") jqGrid() setGridParam ({datatype: 'local', ..})...) Trigger ("reloadGrid");' ist ** sehr schlecht ** innerhalb von 'loadComplete' aus dem gleichen Raster. Sie verwenden explizit 'loadonce: false', aber versuchen Sie, Dinge zu schließen, aber auf die falsche Art und Weise. Was ist dein Ziel? – Oleg

+0

Darüber hinaus ist Ihre Frage über "subgrid nicht beim ersten Laden erweitern". Möchten Sie ** alle Subgrids ** oder ein bestimmtes Subgrid beim Laden erweitern? Sie verwenden 'subGridOptions: {..., expandOnLoad: false, ...}'. Warum sollten Subgrids erweitert werden? jqGrid senden Ajax Anfrage '/ Ord/WS/OrderWebSummary.php' zur Hauptrasterdaten laden und dann wollen Sie für jeden subgrid mehrere Anfragen schicken, um'/Ord/WS/OrderItemSummary.php'? Ist es nicht besser alle Subgrid-Informationen beim Laden des Hauptnetzes zu laden? – Oleg

+0

Ich möchte nicht, dass die Teilraster automatisch zu erweitern, die expandOnLoad werden: true. Wenn die Daten zum ersten Mal in das Hauptgitter geladen werden und ich den Subgrid-Pfeil drücke, wird es nicht erweitert! Nur wenn ich page oder aktualisiere, wird es beim Klicken erweitert. Ich verstehe, was Sie über die verschiedenen Anfragen sagen, aber unabhängig davon, dass es funktionieren soll. – Wayne

Antwort

1

Ihrem Beispiel folgend, wenn Sie diesen Code in Ihre Hauptrasteroptionen hinzufügen, Ihre Teilnetze wird auf loadComplete geöffnet

loadComplete: function(){$(".ui-widget-content.jqgrow.ui-row-ltr td a").click()}, 

Sie können es hier sehen: https://jsfiddle.net/f4vosxqo/1/

0

Alternativ zu S. Pini Antwort, verwenden Sie GridComplete anstelle von loadComplete. Dieser Unterschied ist loadComplete wird jedes Mal ausgelöst, wenn eine Serveranforderung gestellt und das Grid geladen wird. GridComplete wird nur einmal ausgelöst, nachdem ALLE Ladeprozesse abgeschlossen sind. Codebeispiel:

gridComplete: function(){$(".ui-widget-content.jqgrow.ui-row-ltr td a").click()}, 
Verwandte Themen