【问题标题】:Add Index column to dataTable将索引列添加到数据表
【发布时间】:2015-05-10 07:28:54
【问题描述】:

假设我的 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 本身中处理这个问题?)

帮助表示赞赏..!

【问题讨论】:

    标签: javascript c# jquery json datatable


    【解决方案1】:

    试试这个。

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

    【讨论】:

      【解决方案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();
      

      当搜索或排序表格时(创建表格时默认进行排序 - 参见 order 选项的默认值),“Index”单元格的 innerHtml 将根据行的索引计算。

      【讨论】:

        【解决方案3】:

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

        { '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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

            您可以使用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
            

            【讨论】:

            • 它显示第 0 行的请求未知参数“索引”。并且不显示索引号。
            【解决方案6】:

            看看这个网址:Data table Index column

            也许对你有帮助。

            【讨论】:

              【解决方案7】:

              这是我的代码,你可以参考:

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

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

              希望对您有所帮助!

              【讨论】:

                【解决方案8】:

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

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

                【讨论】:

                  【解决方案9】:

                  在此处输入链接描述

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

                  【讨论】:

                    【解决方案10】:

                    在此处输入链接描述

                    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" }
                         
                    });

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-08-29
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-09-05
                      • 2018-04-26
                      • 2019-01-02
                      相关资源
                      最近更新 更多