AjaxControlToolkit.Accordion.CreateControlHierarchy C# (CSharp) Method

CreateControlHierarchy() protected method

protected CreateControlHierarchy ( bool useDataSource ) : void
useDataSource bool
return void
        protected virtual void CreateControlHierarchy(bool useDataSource)
        {
            var count = -1;
            IEnumerable dataSource = null;
            var itemsArray = new List<AccordionPane>();

            if(!useDataSource) {
                var viewCount = ViewState[ItemCountViewStateKey];

                // ViewState must have a non-null value for ItemCount because we check for
                // this in CreateChildControls
                if(viewCount != null) {
                    count = (int)viewCount;
                    if(count != -1) {
                        var dummyList = new List<object>(count);
                        for(var i = 0; i < count; i++)
                            dummyList.Add(null);
                        dataSource = dummyList;
                        itemsArray.Capacity = count;
                    }
                }
            } else {
                dataSource = GetData();
                count = 0;
                var collection = dataSource as ICollection;
                if(collection != null)
                    itemsArray.Capacity = collection.Count;
            }

            if(dataSource != null) {
                var index = 0;
                foreach(var dataItem in dataSource) {
                    var ap = new AccordionPane();
                    ap.ID = String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}_Pane_{1}", ID, index.ToString(CultureInfo.InvariantCulture));

                    Controls.Add(ap);

                    CreateItem(dataItem, index, AccordionItemType.Header, ap.HeaderContainer, HeaderTemplate, useDataSource);
                    CreateItem(dataItem, index, AccordionItemType.Content, ap.ContentContainer, ContentTemplate, useDataSource);

                    itemsArray.Add(ap);

                    count++;
                    index++;
                }
            }

            // If we're binding, save the number of items contained in the repeater for use in round-trips
            if(useDataSource)
                ViewState[ItemCountViewStateKey] = ((dataSource != null) ? count : -1);
        }