private List <TabularItemNode> Sort(CacheFieldNode cacheField, SharedItemsCollection cacheItems) { // Sort the fields according to their types. IComparer <string> comparer = null; if (this.TabularDataNode.CustomListSort && cacheField.IsDateGrouping) { if (cacheField.FieldGroup.GroupBy == PivotFieldDateGrouping.Months) { comparer = new MonthComparer(); } else if (cacheField.FieldGroup.GroupBy == PivotFieldDateGrouping.Days) { comparer = new DayComparer(); } } else { comparer = new NaturalComparer(); } // Sort the slicer cache items. if (this.TabularDataNode.SortOrder == SortOrder.Descending) { return(this.TabularDataNode.Items.OrderByDescending(t => cacheItems[t.AtomIndex].Value, comparer).ToList()); } return(this.TabularDataNode.Items.OrderBy(t => cacheItems[t.AtomIndex].Value, comparer).ToList()); }
public void LoadItems() { var namespaceManager = TestUtility.CreateDefaultNSM(); var xmlDoc = new XmlDocument(namespaceManager.NameTable); xmlDoc.LoadXml( @"<sharedItems xmlns=""http://schemas.openxmlformats.org/spreadsheetml/2006/main"" count=""4""> <n v=""20100076""/> <x v=""0""/> <b v=""0""/> <m/> </sharedItems>" ); var node = xmlDoc.FirstChild; var itemsCollection = new SharedItemsCollection(namespaceManager, node); Assert.AreEqual(4, itemsCollection.Count); var sharedItems = new List <CacheItem> { new CacheItem(namespaceManager, node, PivotCacheRecordType.n, "20100076"), new CacheItem(namespaceManager, node, PivotCacheRecordType.x, "0"), new CacheItem(namespaceManager, node, PivotCacheRecordType.b, "0"), new CacheItem(namespaceManager, node, PivotCacheRecordType.m, ""), }; Assert.AreEqual(sharedItems.Count, itemsCollection.Count); for (int i = 0; i < itemsCollection.Count; i++) { var actual = itemsCollection[i]; var expected = sharedItems[i]; Assert.AreEqual(expected.Type, actual.Type); Assert.AreEqual(expected.Value, actual.Value); } }
/// <summary> /// Creates a new instance of <see cref="ExcelFormatReference"/>. /// </summary> /// <param name="namespaceManager">The namespace manager.</param> /// <param name="node">The xml top node.</param> public ExcelFormatReference(XmlNamespaceManager namespaceManager, XmlNode node) : base(namespaceManager, node) { if (node == null) { throw new ArgumentNullException(nameof(node)); } this.SharedItems = new SharedItemsCollection(this.NameSpaceManager, node); }
private bool PivotTablesContainItem(TabularItemNode item, List <ExcelPivotTable> pivotTables, int cacheFieldIndex, SharedItemsCollection cacheItems) { // Cache field items marked as unused are never referenced in a pivot table. if (cacheItems[item.AtomIndex].Unused) { return(false); } foreach (var pivotTable in pivotTables) { if (pivotTable.ContainsData(cacheFieldIndex, item.AtomIndex)) { return(true); } } return(false); }
public void SharedItemsCollectionConstructorTest() { XmlDocument document = new XmlDocument(); document.LoadXml(@"<sharedItems xmlns=""http://schemas.openxmlformats.org/spreadsheetml/2006/main"" count=""6""><n v=""20100076""/><x v=""0""/> <b v=""0""/> <m v=""0""/> <e v=""415.75""/><d v=""1""/></sharedItems>"); var namespaceManager = TestUtility.CreateDefaultNSM(); var sharedItems = new SharedItemsCollection(namespaceManager, document.SelectSingleNode("//d:sharedItems", namespaceManager)); Assert.AreEqual(6, sharedItems.Count); Assert.AreEqual("20100076", sharedItems[0].Value); Assert.AreEqual(PivotCacheRecordType.n, sharedItems[0].Type); Assert.AreEqual("0", sharedItems[1].Value); Assert.AreEqual(PivotCacheRecordType.x, sharedItems[1].Type); Assert.AreEqual("0", sharedItems[2].Value); Assert.AreEqual(PivotCacheRecordType.b, sharedItems[2].Type); Assert.IsNull(sharedItems[3].Value); Assert.AreEqual(PivotCacheRecordType.m, sharedItems[3].Type); Assert.AreEqual("415.75", sharedItems[4].Value); Assert.AreEqual(PivotCacheRecordType.e, sharedItems[4].Type); Assert.AreEqual("1", sharedItems[5].Value); Assert.AreEqual(PivotCacheRecordType.d, sharedItems[5].Type); }
private List <TabularItemNode> ApplyNoDataSettings(List <TabularItemNode> sortedItems, ExcelPivotCacheDefinition cacheDefinition, int cacheFieldIndex, CacheFieldNode cacheField, SharedItemsCollection cacheItems) { var pivotTables = this.GetRelatedPivotTables(cacheDefinition); if (this.HideItemsWithNoData) { foreach (var item in sortedItems) { // TODO: Task #13685 - Implement hide items with no data settings. if (!this.PivotTablesContainItem(item, pivotTables, cacheFieldIndex, cacheItems)) { item.NoData = true; } } } else { if (this.TabularDataNode.CrossFilter == CrossFilter.Both) { var usedItems = new List <TabularItemNode>(); var unusedItems = new List <TabularItemNode>(); foreach (var item in sortedItems) { bool hasData = this.PivotTablesContainItem(item, pivotTables, cacheFieldIndex, cacheItems); if (hasData) { usedItems.Add(item); } else { unusedItems.Add(item); } } sortedItems = usedItems.Concat(unusedItems).ToList(); } if (!this.TabularDataNode.ShowMissing) { foreach (var item in sortedItems) { if (cacheItems[item.AtomIndex].Unused) { item.NoData = true; } } } } return(sortedItems); }