使用带行分组的数据表时搜索问题

时间:2017-08-19 16:31:42

标签: jquery datatables

我有一个带有两级行分组的jquery数据表。如果我搜索表中的任何内容,它会正确搜索数据,但会删除所有分组或将所有搜索到的数据合并到一个组中。

我尝试过在互联网上找到的大部分内容,但没有一个是有用的。

这是我的代码:

drawCallback: function ( settings ) {
    var api = this.api();
    var rows = api.rows( {page:'all'} ).nodes();
    var last = null;
    var sublast = null;

    var grupo;

    var total = null;
    var subtotal = null;
    var a_origen = null;

    var intVal = function ( i ) {
        return typeof i === 'string' ? i.replace(/[\$,]/g, '_')*1 :
            typeof i === 'number' ? i : 0;
    };

    api.column(0, {} ).data().each( function ( ctra, i ) {
        ctra_assoc = ctra.substring(0, 6);
        if (last !== ctra) {
            $(rows).eq( i ).before(
               '<tr class="group" height= "50px"><td colspan="5">'+ctra.toUpperCase()+'</td><td colspan="2" class="'+ctra_assoc+'"></td></tr>'
            );
            total = intVal(api.column(8).data()[i]);
            last = ctra;
        } else {
            total += intVal(api.column(8).data()[i]);

        }
        $("."+ctra_assoc).html(total.toFixed(2));
        a_origen += intVal(api.column(8).data()[i]);

        grupo = api.column(1).data()[i];
        grupo_assoc = grupo.replace(/\s/g, "_");
        if (sublast !== grupo) {
            $(rows).eq( i ).before(
               '<tr class="subgroup" height= "50px"><td colspan="5">'+grupo+'</td><td colspan="2" class="'+ctra_assoc+'_'+grupo_assoc+'"></td></tr>'
            );
            subtotal = intVal(api.column(8).data()[i]);
            sublast = grupo;
        } else {
            subtotal += intVal(api.column(8).data()[i]);
        };
        $("."+ctra_assoc+'_'+grupo_assoc).html(subtotal.toFixed(2));
    } );

    $(".panel-title").html('Listado de operaciones ejecutadas | Total a origen: '+a_origen.toFixed(2)+' €');

https://jsfiddle.net/mvwf3qwm/3/

我曾尝试过一些案例,例如:

如果我搜索代码12512,结果就可以了。

如果我搜索代码12411,那么我将失去“第一级分组”。

如果我搜索代码22314,则所有分组都将丢失。

当您要求与名为groups的行分开的行时,它似乎失败。

我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

{page:all}更改为{page: current}

这里的问题是当您按'22314'过滤,rows进行迭代时,包含示例中的所有(16)行,并将分组添加到第一行(,即现在隐藏,过滤后)这就是为什么你看不到你的分组。

您需要遍历已过滤的行,这就是您应该应用{page: current}

的原因

工作示例:https://jsfiddle.net/mvwf3qwm/4/

参考文档:

https://datatables.net/reference/type/selector-modifier#page https://datatables.net/examples/advanced_init/row_grouping.html