将索引列添加到dataTable

时间:2015-03-09 07:25:31

标签: javascript c# jquery json datatable

假设我在DataTable中显示以下json:

 // JSON structure for each row in this example:
    //   {
    //      "engine": {value},
    //      "browser": {value},
    //      "platform": {value},
    //      "version": {value},
    //      "grade": {value}
    //   }
    $('#example').dataTable( {
      "ajaxSource": "sources/objects.txt",
      "columns": [
        { "data": "engine" },
        { "data": "browser" },
        { "data": "platform" },
        { "data": "version" },
        { "data": "grade" }
      ]
    } );

我想要的是,将索引列添加到此数据表中以获取该行的编号。 像这样:

 "columns": [
        {"data" : "Index"},      <------- this should number my rows 
        { "data": "engine" },
        { "data": "browser" },
        { "data": "platform" },
        { "data": "version" },
        { "data": "grade" }
      ]

注意:我的Json中传递的数据没有任何索引(尽管我可以这样做,有没有更好的解决方案来处理我的Javascript本身?)

帮助赞赏..!

10 个答案:

答案 0 :(得分:2)

这个概念是你必须在javascript或服务器中创建初始的“索引”值。值可以是零或只是空字符串或其他(不需要计算计数器或其他东西)。例如,您可以在收到数据后在javascript中创建索引列:

for (var i=0; i<data.length; i++){
        data[i].index = 0;
    }

现在你的数据中有索引列,你将它声明为表格的第一列:

$('#example').dataTable( {
  .....
  "columns": [
    { "data": "index" },
    { "data": "engine" },
    { "data": "browser" },
    { "data": "platform" },
    { "data": "version" },
    { "data": "grade" }
  ]
} );

现在索引值都是0.要创建将在表中显示的实际索引值,您需要添加一个事件处理程序来监听表的排序和搜索。在这些事件中,将按照中所述计算实际指数值 datatables example

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

当搜索或排序表时(默认情况下在创建表时完成排序 - 请参阅订单选项的默认值),将根据行的索引计算“索引”单元格的innerHtml。

答案 1 :(得分:1)

只需将以下代码添加到数据表中

即可
{ 'data': 'id', defaultContent: '' },
"columnDefs": [   ////define column 1 , make searchable false 
    {
        "searchable": false,
        "orderable": false,
        "targets": 0

    },

以下是更新的代码:

 var table=$('#example').dataTable( {
     "ajaxSource": "sources/objects.txt",
     "columns": [
         { 'data': 'id', defaultContent: '' },
         { "data": "engine" },
         { "data": "browser" },
         { "data": "platform" },
         { "data": "version" },
         { "data": "grade" },
     "columnDefs": [   ////define column 1
         {
             "searchable": false,
             "orderable": false,
             "targets": 0
         },

     ]
});

以下行会在您的id(index)列中添加数字:

if (t.data().length != 0) {
    t.on('order.dt search.dt', function () {
        t.column(0, { search: 'applied', order: 'applied' }).nodes().each(function (cell, i) {
            cell.innerHTML = i + 1;
            t.cell(cell).invalidate('dom');
        });
    }).draw();

实例:http://live.datatables.net/woboviqi/2/edit

答案 2 :(得分:1)

尝试一下。

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

答案 3 :(得分:1)

需要使用 DT_RowIndex 来索引行。像这样 - ## 标题 ##

"columns": [
{ "data": 'DT_RowIndex'}, // row index
{ "data": "engine" },
{ "data": "browser" },
{ "data": "platform" },
{ "data": "version" },
{ "data": "grade" }
]

答案 4 :(得分:0)

您可以使用unshift()

"columns": [
    { "data": "engine" },
    { "data": "browser" },
    { "data": "platform" },
    { "data": "version" },
    { "data": "grade" }
].unshift({"data" : "Index"})

或者使用临时数组

var cols = [{
    "data": "engine"
}, {
    "data": "browser"
}, {
    "data": "platform"
}, {
    "data": "version"
}, {
    "data": "grade"
}];

cols.unshift({
    "data": "Index"
})

....
"columns": cols

答案 5 :(得分:0)

查看此网址:Data table Index column

它可能对你有帮助。

答案 6 :(得分:0)

以下是我可以参考的代码:

  1. 我的DataTable是完全自定义的。
  2. 我正在使用Ajax和CodeIgniter从数据库中获取数据。
  3. HTML

    <table width="100%" class="table table-striped table-hover" id="table_id_dataTable">
      <thead>
        <tr>
          <th>Sr No</th>
          <th>Column 2</th>
          <th>Column 3</th>
          <th>Column 4</th>
          <th>Column 5</th>
        </tr>
      </thead>
      <tfoot>
        <tr>
          <th>Sr No</th>
          <th>Column 2</th>
          <th>Column 3</th>
          <th>Column 4</th>
          <th>Column 5</th>
        </tr>
      </tfoot>
      <tbody>
    
      </tbody>
    </table>

    JS脚本

    var temp_table = $('#table_id_of_dataTable').DataTable({
      "language": {
        "zeroRecords": "No records found."
      },
      "ajax": {
        "type": "POST",
        "url": "<?php echo base_url('Controller/method'); ?>"
      },
      "responsive": true,
      "columnDefs": [
        {
         "searchable": false,
         "orderable": false,
         "targets": 0
        }
      ],
      "order": [
        [1, 'asc']
      ],
      "columns": [
        { "data": null }, // <-- This is will your index column
        { "data": "column_2_element_name_given_in_controller" }, 
        { "data": "column_3_element_name_given_in_controller" }, 
        { "data": "column_4_element_name_given_in_controller" }, 
        { "data": "column_5_element_name_given_in_controller" }
      ]
    });
    
    // Here we create the index column in jquery datatable
    temp_table.on('order.dt search.dt', function() {
      temp_nuggets_table.column(0, {
        search: 'applied',
        order: 'applied'
      }).nodes().each(function(cell, i) {
        cell.innerHTML = i + 1;
      });
    }).draw();

    希望有所帮助!

答案 7 :(得分:0)

这很简单...对我来说这有用。

Cell: function ( data, type, full, counter ) {
        return  data.index + 1
}

答案 8 :(得分:0)

在此处输入链接描述

Try this: 
var table=$('#example').dataTable( {
     "ajaxSource": "sources/objects.txt",
     "columns": [
        {
                    "data": null, "render": function (data, type, full, meta) {
                        return meta.row + 1;
                    }
         },
         { "data": "engine" },
         { "data": "browser" },
         { "data": "platform" },
         { "data": "version" },
         { "data": "grade" }
     
});

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

答案 9 :(得分:0)

在此处输入链接描述

Try this: 
var table=$('#example').dataTable( {
     "ajaxSource": "sources/objects.txt",
     "columns": [
        {
                    "data": null, "render": function (data, type, full, meta) {
                        return meta.row + 1;
                    }
         },
         { "data": "engine" },
         { "data": "browser" },
         { "data": "platform" },
         { "data": "version" },
         { "data": "grade" }
     
});