2009-04-21 9 views

Répondre

3

Je n'étais pas capable d'identifier comment ajouter réellement des données à un sous-réseau de jqGrid, mais j'étais capable d'ajouter des données à une grille dans une autre grille.

Mon réseau maître ressemble:

$("#" + tblNm).jqGrid({ 
       datatype: "local", 
       colNames: ['id', 'Last Name', 'First Name', 'Address'], 
       colModel: [{ 
        name: 'id', 
        index: 'id', 
        width: 75, 
        sortable: false 
       }, { 
        name: 'lastNm', 
        index: 'lastNm', 
        width: 90, 
        sortable: false 
       }, { 
        name: 'firstNm', 
        index: 'firstNm', 
        width: 100, 
        sortable: false 
       }, { 
        name: 'address', 
        index: 'address', 
        width: 200, 
        align: "left", 
        sortable: false 
       }], 
       width: "100%", 
       height: "100%", 
       caption: "Clients", 
       jsonReader: { 
        root: "clients", 
        page: "currpage", 
        total: "totalpages", 
        records: "totalrecords", 
        repeatitems: false, 
        id: "id" 
       }, 
       subGrid: true, 
       subGridRowExpanded: function(subgrid_id, row_id){ 
        console.debug("SubGrid_ID: " + subgrid_id + 
        " /row_id: " + 
        row_id); 
        var subgrid_table_id, pager_id; 
        subgrid_table_id = "mySubGridName" + row_id; 
        pager_id = "p_" + subgrid_table_id; 
        $("#" + subgrid_id).html("<table id='" + subgrid_table_id + "'></table>"); 
        jQuery("#" + subgrid_table_id).jqGrid({ 
         datatype: "local", 
         colNames: ['Order Id', 'Item Name', 'Cost'], 
         colModel: [{ 
          name: "ordId", 
          index: "ordId", 
          width: 20, 
          key: true 
         }, { 
          name: "itemName", 
          index: "itemName", 
          width: 130 
         }, { 
          name: "cost", 
          index: "cost", 
          width: 200, 
          align: "left" 
         }], 
         rowNum: 20, 
         caption: "Orders", 
         height: '100%', 
         width: '100%', 
         jsonReader: { 
          root: "orders", 
          page: "currpage", 
          total: "totalpages", 
          records: "totalrecords", 
          repeatitems: false, 
          id: "num" 
         } 
        }); 
       } 
      }); 

je charge le réseau maître en faisant quelque chose comme:

$("#" + tblNm)[0].addJSONData(wrapper); 

Puis, quand je reçois les données de sous-grille que je fais quelque chose comme:

// click on the subgrid so that the table is added to the DOM 
// I think there are better ways of doing this... you'll want to look @ the jqGrid documentation 
$("#" + masterTblId + " tr[id='1'] td[role='grid'] a span").click(); 
// add the data to the subgrid 
$("#" + subGridId)[0].addJSONData(wrapper); 

Les parties les plus importantes définissent le code dans la propriété subgridexpanded de jqGrid, puis bei ng capable de forcer l'affichage du sous-réseau.

Le seul problème avec cette méthode est que si l'utilisateur clique sur la zone de sous-réseau, il est basculé et quand il clique dessus, il n'affiche pas la sauvegarde correctement. J'ai demandé à la communauté sur la façon de résoudre ce problème ici:

Subgrid Caching or Stopping Subgrid data from being removed (jqGrid)