2014-09-19 12 views
21

Ho già controllato diverse domande su questo argomento qui in StackOverflow, ma tutte utilizzano il vecchio DataTable. Sto usando DataTable. Ho popolato il mio DataTable, non utilizzando lato server, quindi i dati sono precaricati (JSON) come questo:Come ridisegnare DataTable con nuovi dati

datatable = $("#datatable").DataTable({ 
    data : myData, 
    moreoptions : moreoptions 
}); 

Io non ho avuto un problema con questo, il DataTable caricato bene. Ora voglio ri-popolare quello myData con i nuovi dati che ho caricato. Come ricaricare DataTable per riflettere le modifiche?

Ecco quello che ho provato finora:

$('#upload-new-data').on('click', function() { 
    myData = NewlyCreatedData; // I console logged this NewlyCreatedData, and it has my uploaded data. 

    datatable.draw(); // Redraw the DataTable 
}); 

Ma questo non funziona. Ho provato anche questo:

datatable = $("#datatable").DataTable({ 
    "data" : myData, 
    "drawCallback" : function() { 
     myData = NewlyCreatedData; 
    }, 
    "moreoptions" : moreoptions, 
}); 

Poi durante il caricamento mi basta chiamare il grilletto ridisegno:

$('#upload-new-data').on('click', function() { 
    datatable.draw(); // Redraw the DataTable 
}); 

Comunque questo non funziona.

risposta

33

È necessario prima cancellare la tabella e quindi aggiungere nuovi dati utilizzando la funzione row.add(). All'ultimo passo regolare anche la dimensione della colonna in modo che la tabella renda correttamente.

$('#upload-new-data').on('click', function() { 
    datatable.clear().draw(); 
    datatable.rows.add(NewlyCreatedData); // Add new data 
    datatable.columns.adjust().draw(); // Redraw the DataTable 
}); 

Inoltre se si vuole trovare una corrispondenza tra le funzioni vecchie e nuove API DataTable segnalibro this

+0

Grazie signore, questo ha risolto il mio problema. – user2881063

1
datatable.rows().iterator('row', function (context, index) { 
    var data = this.row(index).data(); 
    var row = $(this.row(index).node()); 
    data[0] = 'new data'; 
    datatable.row(row).data(data).draw(); 
}); 
+1

Qual'era il problema e come lo risolve il tuo codice? – showdev

0

Un'altra alternativa è

dtColumns[index].visible = false/true; 

Per mostrare o nascondere qualsiasi colonna.

+0

È necessario utilizzare 'column(). Visible()' se questo fosse il metodo necessario per risolvere il problema (https://datatables.net/reference/option/columns.visible). Inoltre, se si inizializza con dataTables vs DataTables, è necessario effettuare la chiamata a 'api()'. Esempio: 'yourdatatable.api(). Column (int) .visible (booleano);' vs 'yourdatatable.column (int) .visible (boolean);' – Gwi7d31

5

La risposta accettata chiama la funzione draw due volte. Non riesco a capire perché sarebbe necessario. Infatti, se i tuoi nuovi dati hanno le stesse colonne dei vecchi dati, puoi farlo in una riga:

datatable.clear().rows.add(newData).draw(); 
+0

Quando lo provo non ottengo alcun dato di rendering, anche sebbene il server stia restituendo righe. La maggior parte delle mie colonne sono renderizzate, alcune addirittura hanno un menu a discesa. –

+0

Questo è strano, l'ho usato con successo .... Che versione di DataTables sei? Sto usando 1.10.13 –

+0

Ciao Skeets - Sto usando 1.10.15. –

Problemi correlati