刷新或重新载入数据表

问题描述:

我正在使用Jquery Datatable,其中包括为列自定义呈现。基于价值观,我必须禁用某些控制。我想在post之后重新加载/刷新/重新绑定我的jquery数据表。我怎样才能做到这一点?刷新或重新载入数据表

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

更新:* *

我找到了答案:

  • 清台(fnClearTable)

  • 新数据添加到表(fnAddData )

  • 重绘表(fnDraw)

+0

请在这里包含您的代码,以便我们可以看到发生了什么。尽量将其缩减到只需要最小代码就可以看到发生了什么。 – KRyan 2012-08-02 21:00:23

Ifound答案:

clear the table (fnClearTable) 

add new data to the table (fnAddData) 

redraw the table (fnDraw) 

你再打电话来放在桌子上.dataTable(),不带任何参数。

所以,如果你做了这样的事情:

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

你可以再后来这样做是为了刷新:

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

不要参数再次调用它;它不喜欢那样。

+0

它没有工作。通过sAjaxSource加载jquery数据表格 – user1480864 2012-08-02 20:57:20

+0

@ user1480864:然后看到我对这个问题的评论;我们需要更多信息。 – KRyan 2012-08-02 21:35:48

+0

这不是这种情况......这会在第一次调用之后留下伪像...... – 2014-10-31 00:52:02

首先先手的DataTable参考,使用

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

之后做什么,你想:

Clear the table : oTable.fnClearTable(); 

Redraw the table : oTable.fnDraw(); 

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

只是为了阐明它是var oTable = $(“#someTable”)。dataTable(); (注意函数的骆驼情况)。 – 2013-11-19 01:03:24

+0

谢谢。将其更改为“dataTable”。 – Prateek 2014-02-13 09:03:15

+0

函数名现在是oTable.draw()等api v.1.10 – 2014-08-09 14:08:53

你确定这是不是你要找的东西:

oTable.fnReloadAjax(); 

这对我有用。它使用当前的ajax url config重新加载网格。

+1

pt运行时错误:对象不支持属性或方法'fnReloadAjax' – 2013-12-13 16:52:12

这为我工作:

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

现在只要你做了最初调用重新初始化表:

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

var oTable = $('#groups').dataTable(); 
oTable.fnClearTable(); 
oTable.fnDestroy(); 
groupsList(); 

对于较新的数据表的版本,这将做的工作:

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

就我而言,我只需要重绘它。但是,您也可以在重绘之前清除并添加新数据。