如何使用datatable.net服务器端处理有条件地显示/隐藏列?

时间:2017-11-22 10:58:51

标签: datatables

我正在使用datatable 1.10来生成表格。我使用服务器端处理。根据另一个变量(状态),我想在表格中显示或隐藏一个额外的列。 如何使用datatable.net服务器端处理有条件地显示/隐藏列? 这是我的代码(简化):

 $('#' + id).DataTable({

            dom: "< <'col-md-4 col-sm-12 col-xs-12'f><'col-md-8 col-sm-12 col-xs-12'l><'col-md-12 col-sm-12 col-xs-12 no-padding't><'col-md-3 col-sm-12 col-xs-12'i><'col-md-9 col-sm-12 col-xs-12'p>>"
        , responsive: true
        , createdRow: function (row, data, dataIndex) { //this is used to add data- attribute to td element
            $(row).find('td:eq(4)').attr('data-priority', data.Actions[0].action_priority);
        }
        , autoWidth: true //false
        , scrollX: true
        , pageResize: true
        , serverSide: true
        , processing: true
        , pageLength: 100
        , deferRender: true
        , ajax: {
            url: actionURL,
            type: 'POST',
            contentType: "application/json",
            data: function (model) {

                model.statusID = statusID ;

            },
        }
        , columnDefs:
          [

            {
                targets: 0,
                createdCell: function (td, data, rowData, row, col) { 

*//this is the part that does not work
                   if (incidentStatusID == 1) {
                      //here show column
                      visible:true;
                   }
                  else{
                       //hide column...
                        visible: false;
                   }
                }

            },*
            {
                targets: 3,
                createdCell: function (td, data, rowData, row, col) { //this is used to add data- attribute to td element
                    $(td).attr('data-priority', data.Actions[0].action_priority);
                }
            }

          ]

也许我可以使用等效的createdRowcreatedCell作为列?虽然我找不到一个。我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。它并不完美,因为它首先生成列并在之后隐藏它。

这是我试图隐藏的专栏。我添加了一个ID。

<th id="controls" data-priority="-1">Controls</th>

然后在数据表代码中,我添加了对fnRowCallback的调用,以便在生成表之后隐藏或显示列(这可能会得到改进,因此只有在需要时才会生成列。 ..)。然后我检查了条件(变量&#39; statusID&#39;)以显示或隐藏列,并使用JQuery隐藏它。

以下是相关的新代码:

fnRowCallback: function (nRow, aData, iDisplayIndex, iDisplayIndexFull)
{        
      if (statusID== 0) {
          $('#controls').hide();
          $('td:eq(-1)', nRow).hide();
      }
      else {
          $('#controls').show();
      }
}