2012-08-02 15 views
6

Używam Jquery Datatable, który zawiera niestandardowe renderowanie dla kolumn. Na podstawie wartości, muszę wyłączyć w nim pewną kontrolę. Chcę ponownie załadować/odświeżyć/ponownie powiązać mój datownik danych jquery po wpisie. Jak mogę to zrobić?odśwież lub wczytaj 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> 

Aktualizacja: * *

znalazłem odpowiedź:

  • jasne tabela (fnClearTable)

  • dodać nowe dane do tabeli (fnAddData)

  • przerysować tabelę (fnDraw)

+0

Proszę podać swój kod, abyśmy mogli zobaczyć, co się dzieje. Spróbuj zmniejszyć go do minimalnego kodu niezbędnego do sprawdzenia, co się dzieje. – KRyan

Odpowiedz

1

Znalazłam odpowiedź:

clear the table (fnClearTable) 

add new data to the table (fnAddData) 

redraw the table (fnDraw) 
0

Wystarczy zadzwonić .dataTable() na stole ponownie, bez żadnych argumentów.

Więc jeśli zrobił coś takiego:

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

Można potem to zrobić, aby ją odświeżyć:

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

Nie nazywaj go ponownie z argumentami; to się nie podoba.

+0

to nie działa. ładuję jquery datatable przez sAjaxSource – user1480864

+0

@ user1480864: następnie zobacz mój komentarz do pytania; potrzebujemy więcej informacji. – KRyan

+0

Tak nie jest ... to pozostawia po sobie artefakty z pierwszego połączenia ... –

17

Pierwszy prostu DataTable odniesienia, używając

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

Po tym zrobić cokolwiek, chcesz:

Clear the table : oTable.fnClearTable(); 

Redraw the table : oTable.fnDraw(); 

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

Aby wyjaśnić, że jest to zmienna = $ ("# someTable"). DataTable(); (zwróć uwagę na wielbłądzie w przypadku funkcji). –

+0

Dzięki Mat. Zmieniono go na "dataTable". – Prateek

+0

nazwy funkcji są teraz oTable.draw() itp. Dla api v.1.10 –

-1

Czy jesteś pewien, że to nie to, czego szukasz:

oTable.fnReloadAjax(); 

To zadziałało dla mnie. Odświeża sieć przy użyciu aktualnej konfiguracji adresu URL ajax.

+1

błąd runtu pt: Obiekt nie obsługuje właściwości lub metody "fnReloadAjax" –

2

Ten pracował dla mnie:

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

Teraz wystarczy zrobić wywołanie zrobiłeś Początkowo do reinit tabeli:

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

nowszych DataTable wersji to będzie wykonać zadanie :

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

W moim przypadku po prostu musiałem przerysować go. Ale możesz również wyczyścić i dodać nowe dane, zanim przerysujesz.