1using System;
 2using System.Web.UI;
 3using System.Web.UI.WebControls;
 4using System.ComponentModel;
 5using System.Collections;
 6
 7namespace myControls
 8{
 9
10    public class DataBoundState : System.Web.UI.WebControls.WebControl
11    {
12        private IEnumerable _dataSource;
13        private ITemplate _itemTemplate;
14
15        public IEnumerable DataSource
16        {
17            getreturn _dataSource; }
18            set{ _dataSource = value; }
19        }

20
21        //如果不加在页面应用此控件在绑定时会提示“System.Web.UI.Control 并不包含对 DataItem”的定义的错误
22        [TemplateContainer(typeof(DataBoundStateItem))]
23        public ITemplate ItemTemplate
24        {
25            getreturn _itemTemplate; }
26            set{ _itemTemplate = value; }
27        }

28
29        protected override void OnDataBinding(EventArgs e)
30        {
31            IEnumerator objDataEnum;
32            DataBoundStateItem objItem;
33            int intCounter=0;
34
35            if( DataSource != null )
36            {
37                Controls.Clear();
38                ClearChildViewState();
39                objDataEnum = DataSource.GetEnumerator();
40                while( objDataEnum.MoveNext() )
41                {
42                    objItem = new DataBoundStateItem( objDataEnum.Current );
43                    ItemTemplate.InstantiateIn( objItem );
44                    Controls.Add( objItem );
45                    intCounter ++;
46                }

47                ViewState["NumItems"= intCounter;
48                ChildControlsCreated = true;
49            }

50        }

51
52        protected override void CreateChildControls()
53        {
54            object objNumItems;
55            int intItemCount;
56//            int intCounter;
57            DataBoundStateItem objItem;
58
59            objNumItems = ViewState["NumItems"];
60            if( objNumItems != null )
61            {
62                Controls.Clear();
63                intItemCount = (int)objNumItems;
64                for(int i=0; i<intItemCount; i++ )
65                {
66                    objItem = new DataBoundStateItem( null );
67                    ItemTemplate.InstantiateIn( objItem );
68                    Controls.Add( objItem );
69                }

70            }

71        }

72
73
74    }

75
76    /// <summary>
77    /// 模板类
78    /// </summary>

79    public class DataBoundStateItem : Control, INamingContainer
80    {
81        private object _DataItem;
82
83        public object DataItem
84        {
85            getreturn _DataItem; }
86            set{ _DataItem = value; }
87        }

88
89        public DataBoundStateItem( object DataItem )
90        {
91            _DataItem = DataItem;
92        }

93    }

94
95}

96
posted on 2006-06-06 17:23  滋心  阅读(375)  评论(2)    收藏  举报