2016-04-13 29 views
2

我正在開發我的第一個Ext JS項目,並且我的源數據是從商店中的Web服務器下載的。現在我想要有各種網格顯示源數據的一些變化。例如,網格1將是由1個特定列分組的源數據。網格2將按特定列分組,並且列X ='變量'。等等等等。ext js商店,操縱數據(linq類型查詢)

我來自在WPF中工作的c#背景。所以通常我會使用可觀察集合,並對可觀察集合運行LINQ以形成一個新的可觀察集合,然後將該新集合綁定到我的網格。

我的問題是,如何在EXT JS的商店上運行LINQ類型查詢?

回答

2

您可以在ExtJS上的商店中運行LINQ類型查詢:您可以使用queryqueryBy方法輕鬆地從商店獲得Collection

但是你不能爲你的網格工作,因爲網格不能單獨運行集合,他們每個都需要一個商店。您不希望對這些商店使用LINQ類型查詢。

如果您使用ExtJS6,您可以查看ChainedStore。您可以將每個網格綁定到以數據存儲爲源的ChainedStore。通過使用相應商店上的sort()group()addFilter()函數,可以獨立於來源和其他商店對每個ChainedStore進行過濾,排序和分組。

如果您使用的是較早版本,則必須使用多個存儲並手動複製主存儲中的所有數據。請注意,store.add()需要一個記錄數組,而不是一個集合。而不是store.add(collection),請使用store.add(collection.getRange())getRange()函數將返回一個包含集合中所有項目的數組。

要回答你的問題,從評論: 如果我需要做一些簡單的事情,如創建一個新的商店,從store1,所有由column1和sum列2組?

在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); 
    }); 
}); 
+0

我不介意每個網格都有獨立的商店。我只是試圖找到最好的方法(最佳實踐)來做我想做的事。所以基本上,如果我需要做一些簡單的事情,比如創建一個新的商店,從store1,將所有內容按column1分組,然後求和column2? – solarissf

+0

感謝您的樣本...所以從我可以告訴的是,這將使用匯總行對所有內容進行分組。但是,我只想顯示摘要行,而不是它正在分組的實際項目。你也介意讓我看看嗎? – solarissf

+0

這將意味着您生成彙總行並手動填充商店。或者你可以看看「重心網格」。它需要sencha高級許可證,儘管... – Alexander