2012-08-02 30 views
6

Estoy usando Jquery Datatable, que incluye la representación personalizada para las columnas. En función de los valores, tengo que desactivar cierto control en él. Quiero volver a cargar/actualizar/volver a enlazar mi tabla de datos jquery después de la publicación. ¿Cómo puedo hacer eso?actualizar o volver a cargar la tabla de datos

**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> 

Actualización: * *

encontré la respuesta:

  • clara la mesa (fnClearTable)

  • añadir nuevos datos a la tabla (fnAddData)

  • redibujar la mesa (fnDraw)

+0

Por favor, incluya su código aquí para que podamos ver lo que está pasando. Intenta reducirlo solo al código mínimo necesario para ver qué está pasando. – KRyan

Respuesta

1

Ifound la respuesta:

clear the table (fnClearTable) 

add new data to the table (fnAddData) 

redraw the table (fnDraw) 
0

Tu solo .dataTable() sobre la mesa de nuevo, sin ningún argumento.

Así que si hubiera hecho algo como esto:

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

Más tarde puede hacer esto para actualizarlo:

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

no lo llaman de nuevo con los argumentos; no me gusta eso.

+0

no funcionó. Estoy cargando jquery datatable a través de sAjaxSource – user1480864

+0

@ user1480864: luego vea mi comentario sobre la pregunta; necesitamos más información. – KRyan

+0

Este no es el caso ... esto deja atrás los artefactos de la primera llamada ... –

17

Primera acaba de obtener referencia tabla de datos, utilizando

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

Después de eso hacen lo que sea, desea:

Clear the table : oTable.fnClearTable(); 

Redraw the table : oTable.fnDraw(); 

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

Solo para aclarar que es var oTable = $ ("# someTable"). DataTable(); (tenga en cuenta la carcasa de camello para la función). –

+0

Gracias Mat. Cambió a "dataTable". – Prateek

+0

nombres de las funciones son ahora oTable.draw() etc para V.1.10 API –

-1

¿Estás seguro de que esto es no es lo que está buscando:

oTable.fnReloadAjax(); 

Eso funcionó para mí. Recarga la grilla usando la configuración de ajax url actual.

+1

pt error de tiempo de ejecución: El objeto no admite la propiedad o el método 'fnReloadAjax' –

2

Esto funcionó para mí:

// 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(); 

Ahora acaba de hacer la llamada que hizo Inicialmente a reinicializar la tabla:

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

Para Versiones tabla de datos más recientes Este hará el trabajo :

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

En mi caso solo necesitaba volver a dibujarlo. Pero también puede borrar y agregar nuevos datos antes de volver a dibujar.

Cuestiones relacionadas