Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
 /// <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);
 }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }