ExtJSのストアでLINQタイプのクエリを実行することができます。query
またはqueryBy
メソッドを使用して、ストアからCollection
を簡単に取得できます。
グリッドはコレクションのみでは実行できないため、グリッドではこのように動作することはできません。それぞれにストアが必要です。これらのストアにLINQタイプのクエリを使用することは望ましくありません。
ExtJS6を使用している場合は、ChainedStoreを調べることができます。データストアをソースとして持つChainedStoreに各グリッドをバインドできます。それぞれのストアでsort()
、group()
、およびaddFilter()
関数を使用して、各ChainedStoreをソースおよび他のストアから独立してフィルタリング、ソート、およびグループ化することができます。
以前のバージョンを使用している場合は、複数のストアを使用して、メインストアからすべてのデータを手動でコピーする必要があります。 store.add()はコレクションではなくレコードの配列を取ります。 store.add(collection)
の代わりにstore.add(collection.getRange())
を使用してください。 getRange()
関数は、コレクション内のすべての項目を含む配列を返します。
コメントから質問に答えるには 私はstore1から新しいストアを作成し、column1でグループ化し、column2ですべてを単純化する必要がありますか? ExtJS6で
、あなたがグループ化とグリッドの合計を表示したい場合は、それに沿って何かを次のようになります。
var store2 = Ext.create('Ext.data.ChainedStore',{
source:store1, // use the data from the other store.
grouper:{
property:'someTestField' // grouping is done inside this store.
}
});
Ext.create('Ext.grid.Panel',{
store:store2,
features:[{
ftype:'groupingsummary' // a summary row for each group is provided by this
}],
columns:[{
xtype:'numbercolumn'
dataIndex: 'someTestField'
summaryType: 'sum' // this column should have the sum in the summary row.
}]
})
テストされていないとの保証なし。私は、各グリッドのための別々の店を持つ気にしない
var sums = {};
store1.getGroups().each(function(group,i) {
sums[i] = 0;
group.each(function(record) {
sums[i] += record.get(propertyName);
});
});
:あなたはグリッドなしでそれをしたい場合は、単に合計を計算、それは次のように手動で行わなければなりません。私は何をしようとしている最善の方法(ベストプラクティス)を見つけることを試みているだけです。つまり、基本的に、store1から新しいストアを作成し、column1ですべてをグループ化し、column2で合計するなどの単純な処理を実行する必要がある場合はどうすればよいでしょうか? – solarissf
サンプルのおかげで...私はこれを要約行を使用してすべてをグループ化すると伝えることができますから。ただし、グループ化している実際のアイテムではなく、サマリー行を表示したいだけです。私にもこれを見せてもらえますか? – solarissf
これは、サマリー行を生成し、ストアを手動で移入することを意味します。または、「ピボットグリッド」を見ることができます。しかし、煎茶のプレミアムライセンスが必要です... – Alexander