2017-08-19 4 views
0

2レベルの行グループ化を持つjqueryデータテーブルがあります。私はテーブル内の何かを検索する場合、データを正しく検索しますが、すべてのグループを削除したり、検索したすべてのデータを1つのグループにマージします。行グループ化のデータ型を使用する場合の検索での問題

私はインターネット上で見つけたもののほとんどを試しましたが、どれも役に立たなかった。

これは私のコードです:

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/

I'veには、例えば、いくつかのケースで試してみました:

を私は、コード12512を検索する場合、結果はOKです。

コード12411を検索すると、「第1レベルのグループ化」が失われます。

コード22314を検索すると、すべてのグループが失われます。

グループという名前の行から区切られた行を要求すると、失敗するようです。

私のコードに間違いはありますか?

答えて

0

{page:all}から{page: current}に変更してください。

ここで問題となるのは、反復処理するすべての(16)行を含む「22314」でフィルタ処理し、グループ化が最初の行に追加されます(はフィルタリング後に現在非表示になります)。)thatsなぜあなたのグループは表示されません。 https://jsfiddle.net/mvwf3qwm/4/

リファレンスドキュメント:あなたは、なぜあなたは{page: current}

実施例を適用する必要があることを、フィルター行を反復処理する必要が

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

+0

はどうもありがとうございました。あなたの説明は隠れたグループの問題を解決しますが、別の問題があります。 '22314'でフィルタリングすると 'Grupo II'から 'Grupo I'に変更されます。 –

+0

明らかに、親グループがレンダリングしようとしているときに 'api.column'を取得し、' sublast = null'をリセットすると、すべての場所で '{page:current}'を適用する必要があります。 こちらをご確認ください。https://jsfiddle.net/mvwf3qwm/6/ – yvoytovych

+0

パーフェクト。それは私が探していたように動作します。あなたの興味に感謝します! –

関連する問題