如何根据列中的值预先选择DataTable中的行?

时间:2016-11-17 20:24:16

标签: pandas dataframe datatables row selection

情况:

我有一个pandas数据帧,我通过df.to_html()将其转换为html表。然后我将DataTables类添加到表中。此DataTables-table包含以下列:

ID | X | Y | Val | ...更多专栏...... | Selection_Criteria | ...更多列......

Selection_Criteria中的值可以是1或0.我知道:

$('#ProductList').DataTable( {
...
"fnInitComplete": function(oSettings, json) { $('#ProductList tbody tr:eq(0)').click(); }

});

(资料来源:http://code.datatables.net/forums/discussion/38171/automatic-select-of-the-first-row-on-reload

..理论上可以选择第一行。 (实际上,我无法模拟第一行的点击。)

但我的问题更倾向于:如何在Selection_Criteria中自动预选值为1的所有行?什么是最好的方法?这应该在客户端/服务器端完成吗?

3 个答案:

答案 0 :(得分:1)

在熊猫中,术语“选择”(ing)意味着筛选出未被选择的内容。我知道,在网页的表格中,选中的内容可能意味着突出显示,以突出其他人。有几种方法可以在服务器端执行此操作。您可以显示两个表,每个表对应一个Selection_Criteria状态。这样可以省去尝试从表中选择单个行的麻烦(这可以通过Javascript而不是Pandas完成)。虽然pandas能够将类添加到生成的html中,但该类将应用于该元素。

如果您使用的是jquery,那么您将使用这些部分。因为你没有放置示例数据我不能确切。

将下一行中的x替换为Selection_Criteria = 1在表格中的列数

$( "tr td:nth-child(x):contains('1')" ).addClass('selected');

后端有解决方案,使用beautifulsoup和css选择器,或lxml.etree使用xpath选择器。但是对于这个问题,jquery将是最简洁的。

答案 1 :(得分:1)

@Aliester。谢谢指针!

这帮助我找到了解决自己问题的方法。我做了什么: 1.)识别表加载时要选择的行索引。 2.)将索引传递给js。 3.)遍历索引并将以下命令应用于每个索引条目:

    table.row(':eq('+hit_index_row+')').select();

所以我使用API​​来选择每一行。这对我有用,希望对其他人也有帮助。它可能有点hacky,所以欢迎更优雅的建议!

答案 2 :(得分:0)

您可以通过在初始化DataTable时为“rowCallback”选项提供函数来执行此操作。 https://datatables.net/reference/option/rowCallback

通常,最好使用API​​方法来选择行而不仅仅是更改类。我发现DataTable + Select库保留了所选行索引的内部集合(如果启用了服务器端处理,则只保留当前页面),而不是使用该类来解析所选项目。

因此,虽然显示看起来是正确的,但如果您只是更改了类,如果您依赖任何API方法以便稍后获取所选项,则会出现问题。另外,只更改行上的类不会触发表中的任何“选择”事件,因此您也不能依赖它们。