예제 #1
0
        public IEnumerable <ISPNode> LoadCollectionChildren(ISPNodeCollection parentNode, int batchCount)
        {
            var list = new List <ISPNode>();

            if (parentNode.SPObject == null)
            {
                return(list);
            }

            int count = 0;


            if (parentNode.Pointer == null)
            {
                parentNode.ClearChildren();
                parentNode.TotalCount = 0;
                var collection = (IEnumerable)parentNode.SPObject;
                parentNode.Pointer = collection.GetEnumerator();
                //parentNode.Pointer.Reset();
                parentNode.LoadingChildren = parentNode.Pointer.MoveNext();
            }

            while (count < batchCount && parentNode.LoadingChildren)
            {
                var current = parentNode.Pointer.Current;

                var node = CreateCollectionNode(parentNode, current.GetType());

                if (node != null)
                {
                    node.Initialize(new NullPropertyDescriptor(parentNode.Text), parentNode, parentNode.Pointer.Current, parentNode.TotalCount);
                    if (RunIncludeRules(node))
                    {
                        node.Setup(parentNode);
                        list.Add(node);
                    }
                }

                parentNode.LoadingChildren = parentNode.Pointer.MoveNext();

                count++;
                parentNode.TotalCount++;
            }

            if (parentNode.TotalCount <= batchCount)
            {
                // There are a low number of nodes, therefore sort nodes by Text.
                return(list.OrderBy(p => p.Text));
            }
            // Just add the elements without any sort, because of the high number of nodes.
            return(list);
        }
예제 #2
0
        public IEnumerable<ISPNode> LoadCollectionChildren(ISPNodeCollection parentNode)
        {
            int batchCount = SPExplorerSettings.Current.BatchNodeLoad;

            var list = new List<ISPNode>();
            int count = 0;

            if (parentNode.Pointer == null)
            {
                parentNode.ClearChildren();
                parentNode.TotalCount = 0;
                var collection = (IEnumerable)parentNode.SPObject;
                parentNode.Pointer = collection.GetEnumerator();
                //_pointer.Reset();
                parentNode.MoveNext = parentNode.Pointer.MoveNext();
            }

            while (count <= batchCount && parentNode.MoveNext)
            {
                Type instanceType = parentNode.Pointer.Current.GetType();
                ISPNode node = null;

                if (parentNode.NodeTypes.ContainsKey(instanceType))
                {
                    node = parentNode.NodeTypes[instanceType];
                }
                else
                {
                    if (parentNode.DefaultNode != null)
                    {
                        node = parentNode.DefaultNode;
                    }
                }

                if (node != null)
                {
                    // Always create a new node, because the object has to be unique for each item in the treeview.
                    var instanceNode = (ISPNode) Activator.CreateInstance(node.GetType());
                    instanceNode.NodeProvider = parentNode.NodeProvider;
                    instanceNode.SPObject = parentNode.Pointer.Current;
                    instanceNode.Setup(parentNode.SPObject);
                    list.Add(instanceNode);
                }

                parentNode.MoveNext = parentNode.Pointer.MoveNext();
                count++;
                parentNode.TotalCount++;
            }
            // If there is more nodes in the collection, add a "More" item.
            if (count >= batchCount && parentNode.MoveNext)
            {
                var node = new MoreNode(parentNode);
                node.Setup(parentNode.SPObject);
                list.Add(node);
            }

            if (parentNode.TotalCount <= batchCount)
            {
                // There are a low number of nodes, therefore sort nodes by Text.
                return list.OrderBy(p => p.Text);
            }
            // Just add the elements without any sort, because of the high number of nodes.
            return list;
        }
예제 #3
0
        public IEnumerable<ISPNode> LoadCollectionChildren(ISPNodeCollection parentNode, int batchCount)
        {
            var list = new List<ISPNode>();
            if (parentNode.SPObject == null) return list;

            int count = 0;

            if (parentNode.Pointer == null)
            {
                parentNode.ClearChildren();
                parentNode.TotalCount = 0;
                var collection = (IEnumerable)parentNode.SPObject;
                parentNode.Pointer = collection.GetEnumerator();
                //parentNode.Pointer.Reset();
                parentNode.LoadingChildren = parentNode.Pointer.MoveNext();
            }

            while (count < batchCount && parentNode.LoadingChildren)
            {

                var current = parentNode.Pointer.Current;

                var node = CreateCollectionNode(parentNode, current.GetType());

                if (node != null)
                {
                    node.Initialize(new NullPropertyDescriptor(parentNode.Text), parentNode, parentNode.Pointer.Current, parentNode.TotalCount);
                    if (RunIncludeRules(node))
                    {
                        node.Setup(parentNode);
                        list.Add(node);
                    }
                }

                parentNode.LoadingChildren = parentNode.Pointer.MoveNext();

                count++;
                parentNode.TotalCount++;

            }

            if (parentNode.TotalCount <= batchCount)
            {
                // There are a low number of nodes, therefore sort nodes by Text.
                return list.OrderBy(p => p.Text);
            }
            // Just add the elements without any sort, because of the high number of nodes.
            return list;
        }
        public IEnumerable <ISPNode> LoadCollectionChildren(ISPNodeCollection parentNode)
        {
            int batchCount = SPExplorerSettings.Current.BatchNodeLoad;

            var list  = new List <ISPNode>();
            int count = 0;

            if (parentNode.Pointer == null)
            {
                parentNode.ClearChildren();
                parentNode.TotalCount = 0;
                var collection = (IEnumerable)parentNode.SPObject;
                parentNode.Pointer = collection.GetEnumerator();
                //_pointer.Reset();
                parentNode.MoveNext = parentNode.Pointer.MoveNext();
            }

            while (count <= batchCount && parentNode.MoveNext)
            {
                Type    instanceType = parentNode.Pointer.Current.GetType();
                ISPNode node         = null;

                if (parentNode.NodeTypes.ContainsKey(instanceType))
                {
                    node = parentNode.NodeTypes[instanceType];
                }
                else
                {
                    if (parentNode.DefaultNode != null)
                    {
                        node = parentNode.DefaultNode;
                    }
                }

                if (node != null)
                {
                    // Always create a new node, because the object has to be unique for each item in the treeview.
                    var instanceNode = (ISPNode)Activator.CreateInstance(node.GetType());
                    instanceNode.NodeProvider = parentNode.NodeProvider;
                    instanceNode.SPObject     = parentNode.Pointer.Current;
                    instanceNode.Setup(parentNode.SPObject);
                    list.Add(instanceNode);
                }

                parentNode.MoveNext = parentNode.Pointer.MoveNext();
                count++;
                parentNode.TotalCount++;
            }
            // If there is more nodes in the collection, add a "More" item.
            if (count >= batchCount && parentNode.MoveNext)
            {
                var node = new MoreNode(parentNode);
                node.Setup(parentNode.SPObject);
                list.Add(node);
            }

            if (parentNode.TotalCount <= batchCount)
            {
                // There are a low number of nodes, therefore sort nodes by Text.
                return(list.OrderBy(p => p.Text));
            }
            // Just add the elements without any sort, because of the high number of nodes.
            return(list);
        }