2015-11-17 20 views
5

Sto utilizzando la griglia da http://ui-grid.info/ in un progetto. Ho creato una griglia gerarchica, che funziona bene, ma quando eseguo un'esportazione, esporta solo i dati dalla griglia di livello superiore.È possibile esportare una subgrid in griglia angolare

Questo è di progettazione ed è una funzionalità standard per la griglia, quindi non c'è motivo di inserire alcun codice di esempio. Qualsiasi esempio da http://ui-grid.info/docs/#/tutorial farà.

Esiste un modo per esportare la subgrid (preferibilmente sia la griglia principale che la subgrid insieme come appaiono nella griglia)?

+0

Hai provato data-tabelle. https: //www.datatables.net/E 'basato su jQuery e hai un sacco di estensioni in jq che fa questo. Inoltre, le tabelle di dati sono molto reattive. ng UI-Grid ha reso la loro lib molto complicata inutilmente. – Gary

risposta

3

Purtroppo la risposta è no.

Come si può vedere here la funzione getData scorre tutte le righe e poi attraverso tutte le colonne, aggiungendo una matrice di extractedFields colonne da estrarre e aggregando quelli in una matrice di extractedRows.

Ciò significa che nessun dato, diverso da quello definito in gridOptions 'columnDef verrà letto, convertito ed estratto.

In base alla progettazione, le informazioni di subgrid sono memorizzate all'interno di una proprietà di qualsiasi entità di riga subGridOptions ma questa proprietà non è mai accessibile all'interno della funzione di esportazione.

La motivazione alla base di questo comportamento è che la funzione di griglia espandibile è ancora in uno stadio alfa, quindi il supporto di questa funzionalità in altre funzionalità non è una priorità irresistibile.

Inoltre, l'aggiunta di sottogriglia ad un CSV potrebbe essere molto difficile da progettare, se abbiamo voluto fornire una soluzione generale (per esempio io non penso anche che sarebbe conforme alla CSV standard se aveste diverso numero di colonne la griglia principale e in subgrid).

Detto questo, ui-grid è un progetto open source, quindi, se hai in mente un progetto di lavoro, sentiti libero di aprire una discussione su di esso sullo project gitHub page o, meglio ancora, se puoi progettare un lavoro (e testato) soluzione e creare una richiesta di pull, ancora meglio!

+0

Per mantenere il file esportato confermare allo standard csv, forse ogni griglia occupa un csv separato. La cella della griglia principale che è composta da subgrid include un collegamento al file csv esterno della subgrid ... solo un piccolo pensiero da condividere. – gm2008

+0

Come pensi possano essere i collegamenti? Sinceramente non riesco a pensare a un modo standard per farlo. – imbalind

1

Sono riuscito a farlo funzionare, anche se avessi il tempo lo farei un po 'meglio di quello che ho fatto creando effettivamente un ramo del codice e facendolo correttamente, ma a causa di vincoli di tempo, cosa ho ha funzionato bene

Cordiali saluti, ecco il modo in cui ho finito per convincerlo per fare quello che volevo:

Nelle mie opzioni griglia, ho spento le opzioni di esportazione CSV nel menu a griglia (perché ho implementato solo le modifiche per PDF).

Ho creato una copia di exporter.js, l'ho chiamata custom.exporter.js e ho cambiato il mio riferimento in modo che punti al nuovo file.

In custom.exporter.js, ho creato una copia della funzione getData e l'ho chiamata getGridRows. getGridRows è uguale a getData, tranne per il fatto che restituisce l'oggetto rows senza tutto ciò che ottiene le colonne e così via. Per ora, lo sto codificando per funzionare con un noto set di colonne, quindi non ho bisogno di tutto questo.

ho modificato la funzione pdfExport essere il seguente:

pdfExport: function (grid, rowTypes, colTypes) { 
       var self = this; 

       var exportData = self.getGridRows(grid, rowTypes, colTypes); 

       var docContent = []; 

       $(exportData).each(function() { 
        docContent.push(
         { 
          table: { 
           headerRows: 1, 
           widths: [70, 80, 150, 180], 
           body: [ 
           [{ text: 'Job Raised', bold: true, fillColor: 'lightgray' }, { text: 'Job Number', bold: true, fillColor: 'lightgray' }, { text: 'Client', bold: true, fillColor: 'lightgray' }, { text: 'Job Title', bold: true, fillColor: 'lightgray' }], 
           [formattedDateTime(this.entity.JobDate,false), this.entity.JobNumber, this.entity.Client, this.entity.JobTitle], 
           ] 
          } 
         }); 
        var subGridContentBody = []; 
        subGridContentBody.push([{ text: 'Defect', bold: true, fillColor: 'lightgray' }, { text: 'Vendor', bold: true, fillColor: 'lightgray' }, { text: 'Status', bold: true, fillColor: 'lightgray' }, { text: 'Sign off', bold: true, fillColor: 'lightgray' }]); 
        $(this.entity.Defects).each(function() { 
         subGridContentBody.push([this.DefectName, this.DefectVendor, this.DefectStatus, '']); 
        }); 
        docContent.push({ 
         table: { 
          headerRows: 1, 
          widths: [159, 150, 50, 121], 
          body: subGridContentBody 
         } 
        }); 
        docContent.push({ text: '', margin: 15 }); 
       }); 

       var docDefinition = { 
        content: docContent 
       } 


       if (self.isIE()) { 
        self.downloadPDF(grid.options.exporterPdfFilename, docDefinition); 
       } else { 
        pdfMake.createPdf(docDefinition).open(); 
       } 
      } 
+0

Grazie per averlo condiviso, si è rivelato immensamente utile nel tentativo di implementare la mia esportazione della griglia della mia griglia. –

+0

Una cosa che potrebbe essere migliorata nel codice precedente è l'uso di tabelle nidificate in modo che l'intestazione della tabella del genitore in grado non debba essere ripetuta. Non era ovvio che pdfmake avesse queste caratteristiche, quindi ho postato informazioni su questo qui: http://stackoverflow.com/questions/39454842/nested-sub-tables-with-pdfmake –

Problemi correlati