2012-08-02 15 views
6

Sto usando Jquery Datatable che include il rendering personalizzato per le colonne. In base ai valori, devo disabilitare alcuni controlli al suo interno. Voglio ricaricare/aggiornare/rebindare il mio jquery datatable dopo la pubblicazione. Come lo posso fare?aggiorna o ricarica datatable

**Controller:** 

    [HttpPost] 
    public JsonResult PostAction(MyMOdel model) 
    { 
     //save changes to DB 
     return Json(new 
     { 
      Success = result, 
     }); 
    } 

public ActionResult MyAction() 
    //grab records from DB and return JSON 
} 

**View:** 

@using (Ajax.BeginForm("PostAction", "ControllerName", null, 
     new AjaxOptions 
     { 
      UpdateTargetId = "update-message", 
      InsertionMode = InsertionMode.Replace, 
      HttpMethod = "POST", 
      OnSuccess = "updateSuccess" 
     }, new { @id = "myForm" 

} 
     )) 
{ 
<table id="myTbl" class="display"><tr><td>col1</td></tr></table> 
} 

<script type="text/javascript"> 
     var oTable = $('#myTbl').dataTable({ 
        "sAjaxSource": "/ControllerName/MyAction", 
         <!-- more config --> 

    function updateSuccess(data, status, xhr) { 
     //refresh datatable; 

    } 
</script> 

Aggiornamento: * *

ho trovato la risposta:

  • chiara tabella (fnClearTable)

  • aggiungere nuovi dati alla tabella (fnAddData)

  • ridisegnare il tavolo (fnDraw)

+0

Si prega di includere il codice qui in modo che possiamo vedere cosa sta succedendo. Prova a ridurlo al solo codice minimo necessario per vedere cosa sta succedendo. – KRyan

risposta

1

Ifound la risposta:

clear the table (fnClearTable) 

add new data to the table (fnAddData) 

redraw the table (fnDraw) 
0

Basta chiamare .dataTable() sul tavolo ancora una volta, senza alcun argomento.

Quindi, se avessi fatto qualcosa di simile:

$('#someTable').dataTable({ 
    someAttribue: someValue 
}); 

Si può poi fare questo per aggiornarlo:

$('#someTable').dataTable(); 

Non chiamare di nuovo con gli argomenti; non gli piace.

+0

non ha funzionato. sto caricando jquery datatable attraverso sAjaxSource – user1480864

+0

@ user1480864: quindi vedi il mio commento sulla domanda; abbiamo bisogno di più informazioni – KRyan

+0

Questo non è il caso ... questo lascia gli artefatti dalla prima chiamata ... –

17

Prima solo ottenere riferimento DataTable, utilizzando

var oTable = $("#someTable").dataTable(); 

Dopo di che fare tutto ciò, si vuole:

Clear the table : oTable.fnClearTable(); 

Redraw the table : oTable.fnDraw(); 

Add new data to the table : oTable.fnAddData(); 
+1

Giusto per chiarire che è var oTable = $ ("# someTable"). DataTable(); (notare la custodia del cammello per la funzione). –

+0

Grazie Mat. Modificato su "dataTable". I nomi delle funzioni – Prateek

+0

sono ora oTable.draw(), ecc per api v.1.10 –

-1

Sei sicuro che questo è non quello che stavi cercando:

oTable.fnReloadAjax(); 

Questo ha funzionato per me. Ricarica la griglia utilizzando l'attuale configurazione di ajax url.

+1

errore di runtime pt: l'oggetto non supporta la proprietà o il metodo 'fnReloadAjax' –

2

questo ha funzionato per me:

// Initially 
window.table = $('#TableID').dataTable({ 
        ... 
       }); 

// Later, when table needs to be refreshed 
window.table.fnDestroy(); 
// depending on the version, maybe just .destroy() instead of .fnDestroy(); 

Ora basta fare la chiamata che hai fatto Inizialmente al REINIT tabella:

window.table = $('#TableID').dataTable({ 
        ... 
       }); 
0
var oTable = $('#groups').dataTable(); 
oTable.fnClearTable(); 
oTable.fnDestroy(); 
groupsList(); 
0

Per le versioni più recenti DataTable questo farà il lavoro :

var table = $('#yourDataTable').DataTable({...}); 
table.columns.adjust().draw(); 

Nel mio caso ho solo bisogno di ridisegnarlo. Ma puoi anche cancellare e aggiungere nuovi dati prima di ridisegnare.