将行号列添加到jquery数据表

时间:2011-07-29 09:36:56

标签: jquery html datatables

我希望jQuery数据表能够在第一列中自动创建行号列,如VB中的datagrid。

看起来像这样:

enter image description here

任何人都知道如何做到这一点?

5 个答案:

答案 0 :(得分:35)

只需编写渲染函数:

{
    "data": "id",
    render: function (data, type, row, meta) {
        return meta.row + meta.settings._iDisplayStart + 1;
    }
}

答案 1 :(得分:10)

您只需在aoColumns中定义一个空列。

然后在fnRowCallback函数中,您只需按照自己喜欢的方式编辑列。每次创建新行时都会运行此回调。

基本上,如果您的第一列有行号,您可以在fnRowCallback中执行此操作:

var index = iDisplayIndex +1;
$('td:eq(0)',nRow).html(index);
return nRow;

答案 2 :(得分:2)

正如我评论的那样,@ Pehmolelu和@Tao Wang的答案对我来说效果不佳。我不得不使用DataTables的索引列建议:https://datatables.net/examples/api/counter_columns.html

请注意,在我的情况下,即使列配置通过我的webapp服务器的API调用(有时我有行计数器,有时也没有),在此计数器列之前有3个系统列,因此列索引为3,但您需要调整它以满足您的需求。

t.on('order.dt search.dt', function () {
    t.column(3, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
        cell.innerHTML = i+1;
    });
}).draw();

此外,如果您的解决方案不像我的解决方案那么复杂,上面的链接还会显示您如何以不可移植的+不可搜索的方式添加该列(同样需要根据需要调整列索引):

var t = $('#example').DataTable({
    "columnDefs": [{
        "searchable": false,
        "orderable": false,
        "targets": 3
    }],
    "order": [[4, 'asc']]
});

还有一个你可能想要使用的插件,而不是你自己的代码。

答案 3 :(得分:0)

这是与Datatable 1.10一起使用的另一个新解决方案。

它已通过排序,搜索和页面长度更改为我工作。这是我的解决方案:

在这里简要讨论:https://datatables.net/examples/api/counter_columns.html

$(document).ready(function() {
    var t = $('#example').DataTable( {
        "columnDefs": [ {
            "searchable": false,
            "orderable": false,
            "targets": 0
        } ],
        "order": [[ 1, 'asc' ]]
    } );
                
    t.on( 'draw.dt', function () {
    var PageInfo = $('#example').DataTable().page.info();
         t.column(0, { page: 'current' }).nodes().each( function (cell, i) {
            cell.innerHTML = i + 1 + PageInfo.start;
        } );
    } );
} );

答案 4 :(得分:0)

配置中的 fnRowCallback。 使用 iDisplayIndexFull 而不是 iDisplayIndex。否则显示已显示表格的行(不分页)

$('#myTable').DataTable({
    "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
        $('td:eq(0)', nRow).html(iDisplayIndexFull +1);
    }
});