【问题标题】:refresh or reload datatable刷新或重新加载数据表
【发布时间】:2012-07-31 21:33:47
【问题描述】:

我正在使用 Jquery Datatable,其中包括对列的自定义呈现。根据值,我必须禁用其中的某些控件。我想在发布后重新加载/刷新/重新绑定我的 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)

【问题讨论】:

  • 请在此处包含您的代码,以便我们查看发生了什么。请尝试将其缩减为查看发生了什么所需的最少代码。

标签: jquery datatable


【解决方案1】:

首先获取数据表引用,使用

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

之后做任何你想做的事:

Clear the table : oTable.fnClearTable();

Redraw the table : oTable.fnDraw();

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

【讨论】:

  • 只是为了澄清 var oTable = $("#someTable").dataTable(); (注意函数的驼峰式大小写)。
  • 谢谢垫。将其更改为“数据表”。
  • 函数名称现在是 oTable.draw() 等 api v.1.10
  • 我当前版本的 DataTables (1.10) 现在允许使用 fnClearTable();它返回错误Uncaught (in promise) TypeError: $(...).DataTable(...).fnClearTable is not a function(…)
  • 尝试 $(...).DataTable(...).clear().draw() 代替。 datatables.net/reference/api/clear()
【解决方案2】:

我找到了答案:

clear the table ( fnClearTable )

add new data to the table ( fnAddData)

redraw the table ( fnDraw )

【讨论】:

    【解决方案3】:

    这对我有用:

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

    【讨论】:

      【解决方案4】:

      您只需再次在桌子上调用.dataTable(),无需任何参数。

      如果你做了这样的事情:

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

      您可以稍后执行此操作来刷新它:

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

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

      【讨论】:

      • 它没有用。我正在通过 sAjaxSource 加载 jquery 数据表
      • @user1480864:然后看看我对这个问题的评论;我们需要更多信息。
      【解决方案5】:
      var oTable = $('#groups').dataTable();
      oTable.fnClearTable();
      oTable.fnDestroy();
      groupsList();
      

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

          【解决方案7】:

          你确定这不是你要找的:

          oTable.fnReloadAjax();
          

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

          【讨论】:

          • pt 运行时错误:对象不支持属性或方法'fnReloadAjax'
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-07
          • 2014-08-08
          • 2021-01-07
          • 2011-11-29
          • 1970-01-01
          相关资源
          最近更新 更多