1
using System;
2
using System.Web.UI;
3
using System.Web.UI.WebControls;
4
using System.ComponentModel;
5
using System.Collections;
6
7
namespace 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
get
{ return _dataSource; }
18
set
{ _dataSource = value; }
19
}
20
21
//如果不加在页面应用此控件在绑定时会提示“System.Web.UI.Control 并不包含对 DataItem”的定义的错误
22
[TemplateContainer(typeof(DataBoundStateItem))]
23
public ITemplate ItemTemplate
24
{
25
get
{ return _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
get
{ return _DataItem; }
86
set
{ _DataItem = value; }
87
}
88
89
public DataBoundStateItem( object DataItem )
90
{
91
_DataItem = DataItem;
92
}
93
}
94
95
}
96

2

3

4

5

6

7

8



9

10

11



12

13

14

15

16



17



18



19

20

21

22

23

24



25



26



27

28

29

30



31

32

33

34

35

36



37

38

39

40

41



42

43

44

45

46

47

48

49

50

51

52

53



54

55

56

57

58

59

60

61



62

63

64

65



66

67

68

69

70

71

72

73

74

75

76


77

78

79

80



81

82

83

84



85



86



87

88

89

90



91

92

93

94

95

96
