2012-08-02 9 views
6

Ich benutze Jquery Datatable, die benutzerdefinierte Rendering für Spalten enthält. Basierend auf Werten muss ich bestimmte Steuerelemente deaktivieren. Ich möchte meine Jquery-Datatabelle nach dem Post neu laden/aktualisieren/neu binden. Wie kann ich das machen?aktualisieren oder neu laden Datentabelle

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

Update: * *

ich die Antwort gefunden:

  • klar die Tabelle (fnClearTable)

  • fügen Sie neue Daten in die Tabelle (fnAddData)

  • die Tabelle (fnDraw)

+0

Bitte geben Sie hier Ihren Code ein, damit wir sehen können, was vor sich geht. Versuchen Sie, es auf den minimalen Code zu reduzieren, der notwendig ist, um zu sehen, was vor sich geht. – KRyan

Antwort

1

ifound die Antwort ein:

clear the table (fnClearTable) 

add new data to the table (fnAddData) 

redraw the table (fnDraw) 
0

Sie rufen .dataTable() wieder auf den Tisch, ohne Argumente neu zu zeichnen.

Also, wenn Sie so etwas getan hatte:

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

Sie können diese dann später tun es aufzufrischen:

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

Sie es nicht wieder mit den Argumenten aufrufen; Es mag das nicht.

+0

hat es nicht funktioniert. lade jquery Datentabelle durch sAjaxSource – user1480864

+0

@ user1480864: dann sehen Sie meinen Kommentar zu der Frage; Wir brauchen mehr Informationen. – KRyan

+0

Das ist nicht der Fall ... das hinterlässt Artefakte vom ersten Aufruf ... –

17

Zuerst nur Datentabelle Referenz erhalten,

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

Danach was auch immer tun mit, Sie wollen:

Clear the table : oTable.fnClearTable(); 

Redraw the table : oTable.fnDraw(); 

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

Um das zu verdeutlichen, ist var oTable = $ ("# someTable"). DataTable(); (Beachten Sie den Kamelfall für die Funktion). –

+0

Dank Mat. In "dataTable" geändert. – Prateek

+0

Funktionsnamen sind jetzt oTable.draw() usw. für API v.1.10 –

-1

Sie diese sicher sind, dass nicht was du suchst:

oTable.fnReloadAjax(); 

Das hat bei mir funktioniert. Es lädt das Gitter mit der aktuellen Ajax-URL-Konfiguration neu.

+1

pt Laufzeitfehler: Objekt unterstützt keine Eigenschaft oder Methode 'fnReloadAjax' –

2

Dieser arbeitete für mich:

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

Jetzt tun nur der Anruf Sie Zunächst hat die Tabelle zu reinit:

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

Für neuere Datentabelle Versionen dies den Job tun :

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

In meinem Fall musste ich es nur neu zeichnen. Sie können jedoch auch neue Daten löschen und hinzufügen, bevor Sie sie neu zeichnen.

Verwandte Themen