使用复选框插件时预先选择数据表的行

Posted

技术标签:

【中文标题】使用复选框插件时预先选择数据表的行【英文标题】:Pre-selection of rows for datatable when checkbox plugin used 【发布时间】:2019-07-25 04:30:44 【问题描述】:

还没有在任何地方看到这样的例子。我的多选数据表从数组加载并使用 Gyrocode 复选框插件构建复选框列。我可以将用户选择分配给数组 - 请参阅表格顶部的按钮,该按钮输出到控制台。但是,我需要在初始化时向数据表发送一个或多个预选,以便表格以已经突出显示和检查的那些选择开始。这些选择可能会改变,所以我想它们需要作为某种变量发送到表中。我很困惑如何使用我的数据结构来做到这一点,尽管理想情况下我想保持原样。有什么想法吗? https://jsfiddle.net/sg0o3bwL/1/

<script src="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"></script>
<script src="https://gyrocode.github.io/jquery-datatables-checkboxes/1.2.10/js/dataTables.checkboxes.min.js"></script>
<link href="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.css" rel="stylesheet" />

<button id="myselections" type="button" style="height: 20px; width: 150px;">See selections</button>

<form id="frm-example" action="/nosuchpage" method="POST">
  <table id="example" class="display select" cellspacing="0" >
    <thead>
      <tr>
        <th></th>
        <!-- invisible col. for enable/disable separation -->
        <th>Order</th>
        <th>Sort</th>
        <th>Sort</th>
        <th>Sort</th>
        <th>Province</th>
        <th>City</th>
        <th>Status</th>
        <th>Sort</th>
        <th>Type</th>
      </tr>
    </thead>
  </table>
</form>




  $(function() 

  var MYdataSet1 = [
    ["", "1", "Bahrain", "Foulath", "Bahrain Steel BSCC", "Cobham", "Venice", "", "Sinter Plant, Coke plant, BF, BOF,Slab Caster, HSM, CRM ", ""],
    ["", "2", "Bombay", "Foulath", "United Stainless Steel Company", "Ealing", "Rome", "x", "Sinter Plant, Coke plant, BF, BOF,Slab Caster, HSM, CRM ", ""],
    ["", "3", "Bahrain", "Foulath (51%) :: Yamato Kogyo (49%)", "United Steel Company (Sulb)", "Kingston", "Milan", "", "Sinter Plant, Coke plant, BF, BOF,Slab Caster, HSM, CRM ", ""],
    ["", "4", "Universal Rolling", "", "", "acton", "Arson", "", "Sinter Plant, Coke plant, BF, BOF,Slab Caster, HSM, CRM ", ""],
    ["", "5", "Abul Khair Steel Products (AKSP)", "Jackson", "", "Barnes", "", "", "Sinter Plant, Coke plant, BF, BOF,Slab Caster, HSM, CRM", ""],
    ["", "6", "Bangladesh", "Anwar Isphat", "", "Sheen", "", "", "Sinter Plant, Coke plant, BF, BOF,Slab Caster, HSM, CRM ", ""],
    ["", "7", "Baizid Steel", "Baizid Steel", "", "Mayfair", "", "", "Sinter Plant, Coke plant, BF, BOF,Slab Caster, HSM, CRM ", ""],
    ["", "8", "Bengalh Steel Rolling Mills (BSRM)", "", "", "Park lane", "", "", "Sinter Plant, Coke plant, BF, BOF,Slab Caster, HSM, CRM ", ""],
  ];


// 'Initialise' DataTable

  var TradeDatatable = $('#example').DataTable(
    data: MYdataSet1,
    orderCellsTop: true,
    fixedHeader: true,
    scrollCollapse: true,
    paging: false,
    processing: true,
    orderCellsTop: true,

    'columnDefs': [
        targets: 0,
        visible: false
      , // This refers to the invisible column only - used to sort enabled from disabled rows

      
        'targets': 1, // Refers to the Checkbox col. only
        'checkboxes': 
          'selectRow': true
        ,
      ,
      ],

    'select': 
      'style': 'multi'
    ,

    "order": [
      [2, "asc"]
    ], // Default sorted column no.

    orderFixed: [0, 'desc'],
  );

//------------------

// List all ticked row selections

  $('#myselections').click(function(e) 

    var form = this;

    // Assume chkbxes to be in column 1 (col 0 is purposely blank)
    var rows_selected = TradeDatatable.column(1).checkboxes.selected();

    // Iterate over all selected checkboxes
    $.each(rows_selected, function(index, rowId) 

      // Create a hidden element
      $(form).append(
        $('<input>')
        .attr('type', 'hidden')
        .attr('name', 'id[]')
        .val(rowId)
      );
    );

    // Raw list of selected rows
    var RawRowNumbers = rows_selected.join(",");
    var CurrentSelectedArray = RawRowNumbers.split(','); // split string on comma

    function sortNumber(a, b) 
      return a - b;
    
    CurrentSelectedArray.sort(sortNumber);
    console.log('Table selected_rows:', CurrentSelectedArray)

  );

);

【问题讨论】:

你想选择什么?参数是什么? 每一行都有一个唯一的数字(数组中的第二个条目),所以我想这需要是参数。所以我想我会告诉表格预先选择,比如第 2、3 和 6 行,或者其他什么。 在我的回答中添加了一些信息以显示更多信息。 【参考方案1】:

你可以在这里做几件事,但无论哪种方式,你都需要添加

select: true, 到您的餐桌设置...像这样:

data: MYdataSet1,
orderCellsTop: true,
fixedHeader: true,
scrollCollapse: true,
paging: false,
processing: true,
orderCellsTop: true,
select: true,

然后在表格加载完成后,你可以运行如下:

TradeDatatable.rows([1,2]).select();

这将选择第 2 行和第 3 行(第 1 行实际上是 0)。但是,它会在您应用的排序之前选择。如果您进行排序,您将看到完全按照上面数组中的顺序选择的行。除了行号之外,还有很多方法可以用来选择所需的内容。见这里:https://datatables.net/reference/api/rows().select()

您可以通过行上的类(可以添加)或行的特定列的内容进行选择,但是在不知道您希望搜索基于什么参数的情况下,很难说。

更新:

也可以根据栏目内容进行选择:

TradeDatatable.rows( function ( idx, data, node ) 
    return data[2] === 'Bahrain';
 )
.select();

这将选择第 3 列(索引中的第 2 列)包含单词“Bahrain”的任何行

【讨论】:

太棒了!不敢相信我没有为自己解决这个问题 - 认为它要复杂得多。非常清楚的解释,非常感谢。 很高兴它有帮助。

以上是关于使用复选框插件时预先选择数据表的行的主要内容,如果未能解决你的问题,请参考以下文章

Slickgrid:如何使用新的复选框选择列插件获取选定的行?

使用复选框选择取消选择 kendo UI Grid 的行

如何使用 jQuery DataTables 和复选框作为行选择器访问列元素数据

java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据

Datatable vuetify 选择多行(Shift+单击)

存储选定的行 ID