如何在删除行后刷新jquery数据表

时间:2011-12-27 20:13:54

标签: jquery asp.net-mvc-3

数据表中的每一行都有一个删除按钮。

点击删除按钮,我正在调用此代码:

$('.deleteButton').live('click', function () {

             var $this = $(this);
             var url = $this.attr("id");
             $("#example").fnReloadAjax();
             $.getJSON(url, Success());
         });

url是控制器的操作,它接收Id并从数据库中删除数据。这样可行。 我现在想要调用datatable的刷新/重绘功能,以便它可以加载新的结果,但它不起作用。

数据表是:

 $("#example").dataTable({
             "aoColumns": [
                     { "sTitle": "Id" },
                      { "sTitle": "Name" }],


             "bProcessing": true,
             "bServerSide": true,

             "sAjaxSource": '@Url.Action("FetchData", "Home")',
             "sPaginationType": "full_numbers",

});

有人可以提供建议吗?

4 个答案:

答案 0 :(得分:9)

引自API datatable page - fnReloadAjax()项目符号

  

注意:要在使用服务器端处理时重新加载数据,只需使用   内置的API函数fnDraw而不是这个插件。

因此,您最好使用fnDraw

[编辑]实际上,您的通话顺序应为:

// you don't have to use $.json because you don't use the downloaded data
// first, ask the server to delete the data   
$.ajax({
   url: urlToDelete,
   success: function() {
       // if it worked, ask datatable to redraw the table with the new data
       $("#example").dataTable().fnDraw();
       // if this js function does anything useful (like deleting the row), then call it:
       Success();
   },
   error: function() {
       // display any error (like server couldn't be reached...), or at least try to log it
   }
});

答案 1 :(得分:3)

我能够用比上面答案中提供的更简单的方法来解决这个问题。

Ajax调用从后端删除数据

首先使用普通的ajax异步调用从后端删除数据。

从前端数据表中删除

获取要删除的行TR并使用数据表函数fnDeleteRow删除此行。这将自动刷新表格,因此您不需要任何fnDraw或其他内容。

//in my case its delete button which was clicked 
//so I got its parents parent which is TR row
var row = $(this).parent().parent();


$('DATA TABLE SELECTOR').dataTable().fnDeleteRow(row);

你完成了......: - )

答案 2 :(得分:1)

这里的答案对我没用,所以我用了这个:

http://datatables.net/plug-ins/api#fnReloadAjax

将其添加到文件中:

$.fn.dataTableExt.oApi.fnReloadAjax = function ( oSettings, sNewSource, fnCallback, bStandingRedraw )
{
    if ( sNewSource !== undefined && sNewSource !== null ) {
        oSettings.sAjaxSource = sNewSource;
    }

    // Server-side processing should just call fnDraw
    if ( oSettings.oFeatures.bServerSide ) {
        this.fnDraw();
        return;
    }

    this.oApi._fnProcessingDisplay( oSettings, true );
    var that = this;
    var iStart = oSettings._iDisplayStart;
    var aData = [];

    this.oApi._fnServerParams( oSettings, aData );

    oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aData, function(json) {
        /* Clear the old information from the table */
        that.oApi._fnClearTable( oSettings );

        /* Got the data - add it to the table */
        var aData =  (oSettings.sAjaxDataProp !== "") ?
            that.oApi._fnGetObjectDataFn( oSettings.sAjaxDataProp )( json ) : json;

        for ( var i=0 ; i<aData.length ; i++ )
        {
            that.oApi._fnAddData( oSettings, aData[i] );
        }

        oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();

        that.fnDraw();

        if ( bStandingRedraw === true )
        {
            oSettings._iDisplayStart = iStart;
            that.oApi._fnCalculateEnd( oSettings );
            that.fnDraw( false );
        }

        that.oApi._fnProcessingDisplay( oSettings, false );

        /* Callback user function - for event handlers etc */
        if ( typeof fnCallback == 'function' && fnCallback !== null )
        {
            fnCallback( oSettings );
        }
    }, oSettings );
};

在您的网页上包含该文件并按以下方式调用:

// Example call to load a new file
oTable.fnReloadAjax( 'media/examples_support/json_source2.txt' );

// Example call to reload from original file
oTable.fnReloadAjax();

答案 3 :(得分:0)

使用dataTable实例并从数据表中删除行

dataTable.fnDeleteRow($(that).closest('tr').remove());
dataTable.fnDraw();