J'ai déjà vérifié plusieurs questions sur ce sujet dans stackoverflow, mais elles utilisent toutes l'ancien dataTable. J'utilise DataTable. J'ai rempli mon DataTable en n'utilisant pas le côté serveur, donc les données sont préchargées (JSON) comme ceci:
datatable = $("#datatable").DataTable({
data : myData,
moreoptions : moreoptions
});
Cela ne me posait pas de problème, le DataTable se chargeait parfaitement. Maintenant, je veux re-peupler cette myData
avec les nouvelles données que j'ai téléchargées. Comment recharger le DataTable pour refléter les changements?
Voici ce que j'ai essayé jusqu'à présent:
$('#upload-new-data').on('click', function () {
myData = NewlyCreatedData; // I console logged this NewlyCreatedData, and it has my uploaded data.
datatable.draw(); // Redraw the DataTable
});
Mais ça ne marche pas. J'ai aussi essayé ceci:
datatable = $("#datatable").DataTable({
"data" : myData,
"drawCallback" : function () {
myData = NewlyCreatedData;
},
"moreoptions" : moreoptions,
});
Ensuite, lors du téléchargement, j'appelle simplement le déclencheur de rafraîchissement:
$('#upload-new-data').on('click', function () {
datatable.draw(); // Redraw the DataTable
});
Cela ne fonctionne toujours pas.
Vous devez d'abord vider la table, puis ajouter de nouvelles données à l'aide de la fonction row.add (). À la dernière étape, ajustez également la taille de la colonne pour que le rendu de la table soit correct.
$('#upload-new-data').on('click', function () {
datatable.clear().draw();
datatable.rows.add(NewlyCreatedData); // Add new data
datatable.columns.adjust().draw(); // Redraw the DataTable
});
Aussi, si vous souhaitez trouver un mappage entre l’ancien et le nouveau des fonctions de l’API datatable signet this
La réponse acceptée appelle la fonction draw
à deux reprises. Je ne vois pas pourquoi cela serait nécessaire. En fait, si vos nouvelles données ont les mêmes colonnes que les anciennes, vous pouvez le faire en une seule ligne:
datatable.clear().rows.add(newData).draw();
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();
});
Une autre alternative est
dtColumns[index].visible = false/true;
Pour afficher ou masquer une colonne.