2017-10-05 4 views
1

私の目的は、jqGridで複数レベルのグループ化を行い、各レベルのサマリーフッターを追加することです。jqGgrid:マルチレベルグループ化サマリー値

動的な3レベルのグループ化を行うために拡張したグループ化を動的に変更するために、コードを公式のウェブサイトで使用しました。

3つのコンボボックスを作成して、各レベルのグループ化に関連する列名を選択しました。

私はmutliレベルのグループ化を達成しましたが、ここではサマリーフッターがページごとであり、各グループのすべての行の合計ではありません。

私はいくつかのソリューションを試しました: このうちの1つ、このリンクに実装されたソリューションhttp://www.guriddo.net/demo/guriddojs/grouping/summary_and_grand_total/index.htmlしかし、それは私のために働いていません。

私はクライアント側の各グループの合計行を計算するためにsummaryType関数をカスタマイズしようとしましたが、できません。

ここでは、サーバー側の最初のレベルでグループ化されたリストを準備してから、クライアント側で「userdata」を使用してsummuryフッターを埋めるようにしました。 これは私の関数である:

var sumArraySearch = []; 
var criteria = '';// column name selected in Combobox to do the grouping 
function sumSearch(val, name, record) 
{ 
    if(init == 0){ 
     // console.log ($("#griddata").jqGrid('getGridParam','userData').rows); 
     var rows = $("#griddata").jqGrid('getGridParam','userData').rows; 
     var size = $("#griddata").jqGrid('getGridParam','userData').rows.length; 
     for (var i = 0; i < size; i++) { 
      sumArraySearch[rows[i][criteria]]= rows[i]['brutto']; 

     } 
     init ++; 
    } 
    return sumArraySearch[record[criteria]]; 
} 

そして、私は、サーバーから2つのリストを送信する場合、私は、今、ブロックされています:最初は、最初のレベルによってグループ化されたデータであり、第二には、どのような第2のレベルによってグループ化されたデータであります私は合計が1つの関数によって返されるので、各グループの正しい合計を取得しますか?

EDIT:

私は、問題を実証するためのJSFiddleデモを用意しました。

+0

1)あなたのコードでは、 'loadonce:true'ではなく' loadOnce:true'を使います。オプションを修正する必要があります。 2)使用する(使用できる)jqGridの**バージョン**、およびjqGridの[** fork **]に関する情報を含めてください([free jqGrid](https://github.com/free-jqgrid)/jqGrid)、コマーシャル[Guriddo jqGrid JS](http://guriddo.net/?page_id=103334)またはバージョン<= 4.7の古いjqGrid)。 3)無料のjqGrid forkを使用している場合は、 'loadClientSorting:true'を追加することをお勧めします。これは' loadonce:true'オプションを拡張します。 4)問題を示すJSFiddleデモを準備するとよいでしょう。 – Oleg

+0

作業デモにデータを用意してください。このようにして問題を探すことは可能です。 –

+0

@Oleg:無料のjQgrid 4.4.3を使用しています。 4.7にバージョンをアップグレードするソリューションですか? – nayomi

答えて

0

私が見ている主な問題:デモでは動的グループ化が必要です。ここでユーザーは列の順序を選択します。サーバー側の計算は無価値になります。あなたが本当にをグループ化する一定の順序を持​​っているなら、あなたはちょうどそれが

summaryType: function sumSearch(val, name, record, groupInfo) { 
    var p = $(this).jqGrid("getGridParam"); 
    return p.userData.sums[record.agt]; 
} 
summaryType機能を簡素化することができますagt、例えば、

userData: { 
    brutto: "1593.2", 
    sums: { "455": "462.96", "806": "1130.06" } 
} 

で必要とされる合計値を取得できるようにuserDataの構造を簡素化する必要があります

または

summaryType: function sumSearch(val, name, record, groupInfo) { 
    var p = $(this).jqGrid("getGridParam"); 
    return p.userData.sums[groupInfo.keys[0]]; 
} 

https://jsfiddle.net/OlegKi/d2v0neo5/43/を参照してください。

あなたは本当には、グループ化列を選択し、ユーザと、あなたはクライアント側に合計を計算する必要があります動的をグループ化するためにが必要な場合。たとえば、p.lastSelectedDataパラメータを使用して、すべてのページのすべてのデータに正しくソートされた順序でアクセスし、p.groupingView.groupFieldを調べてグループ化列の現在の値を確認し、groupInfo.keys配列を使用して現在のグループのすべてのキーを表示できます。より複雑なコードが得られますが、をローカルで計算して合計してsummaryTypeから返すことができます。

関連する問題