// override to create repeated items
        protected override void CreateChildControls()
        {
            if (!Visible)
            {
                return;
            }
            SelectedIndex = -1;

            object o = ViewStateAttributes.GetFromViewState("NumItems", null);

            if (o != null)
            {
                // get item ids and indexes for supporting ajax list append, insert and remove operations and restoring the exact previous state
                ArrayList itemIds     = GetViewStateItemIds();
                ArrayList itemIndexes = GetViewStateItemIndexes();

                // clear any existing child controls
                Controls.Clear();

                int numItems = (int)o;
                int pageSize = this.PageSize;


                for (int i = 0; i < numItems && i < pageSize; i++)
                {
                    // create item
                    RepeaterItem  item    = new RepeaterItem(i, null);
                    InvisibleItem invItem = new InvisibleItem(i, null);

                    try {
                        // initialize item id
                        if (itemIds != null)
                        {
                            item.ID    = Iterator.FormatId((int)itemIds[i * 2]);
                            invItem.ID = Iterator.FormatId((int)itemIds[i * 2 + 1]);
                        }
                        else
                        {
                            item.ID    = Iterator.FormatId(i * 2);
                            invItem.ID = Iterator.FormatId(i * 2 + 1);
                        }
                        // initialize item index
                        if (itemIndexes != null)
                        {
                            item.ItemIndex    = (int)itemIndexes[i * 2];
                            invItem.ItemIndex = (int)itemIndexes[i * 2 + 1];
                        }
                    } catch (ArgumentOutOfRangeException) {
                        throw new HEMessageException(MR.GetMessage(MessageId.AjaxListModified, "List Records", this.ID));
                    }

                    // initialize item from template
                    ItemTemplate.InstantiateIn(item);
                    InvisibleTemplate.InstantiateIn(invItem);
                    // add item to the child controls collection
                    Controls.Add(item);
                    Controls.Add(invItem);
                }
            }
        }
        private void CreateItem(object current, int i, bool doDatabind)
        {
            // create item
            RepeaterItem  item    = new RepeaterItem(i, current);
            InvisibleItem invItem = new InvisibleItem(i, current);

            // get the id of the last created item
            int lastId = -1;

            if (Controls.Count > 0)
            {
                lastId = Iterator.GetIntegerId(Controls[Controls.Count - 1].ID);
            }

            // initialize item from template
            ItemTemplate.InstantiateIn(item);
            InvisibleTemplate.InstantiateIn(invItem);

            // set the ids appropriately
            item.ID    = Iterator.FormatId(lastId + 1);
            invItem.ID = Iterator.FormatId(lastId + 2);

            // add item to the child controls collection
            Controls.Add(item);
            Controls.Add(invItem);

            if (doDatabind)
            {
                item.DataBind();
                invItem.DataBind();
            }
        }
        public void RefreshItem(int dataItemIndex)
        {
            // set the datasource position
            IOSList rl = DataSource;

            rl.SetPosition(dataItemIndex);
            SelectedIndex = dataItemIndex;

            // databind the correspondent item
            int          controlIndex = GetItemControlIndex(dataItemIndex);
            RepeaterItem item         = (RepeaterItem)Controls[controlIndex];

            item.DataItem = rl.Current;
            item.DataBind();

            InvisibleItem invItem = (InvisibleItem)Controls[controlIndex + 1];

            invItem.DataItem = rl.Current;
            invItem.DataBind();
        }