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
using System;2
using System.Web.UI;3
using System.Web.UI.WebControls;4
using System.ComponentModel;5
using System.Collections;6

7
namespace myControls8
{9

10
public class DataBoundState : System.Web.UI.WebControls.WebControl11
{12
private IEnumerable _dataSource;13
private ITemplate _itemTemplate;14

15
public IEnumerable DataSource16
{17
get{ return _dataSource; }18
set{ _dataSource = value; }19
}20

21
//如果不加在页面应用此控件在绑定时会提示“System.Web.UI.Control 并不包含对 DataItem”的定义的错误22
[TemplateContainer(typeof(DataBoundStateItem))]23
public ITemplate ItemTemplate24
{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, INamingContainer80
{81
private object _DataItem;82

83
public object DataItem84
{85
get{ return _DataItem; }86
set{ _DataItem = value; }87
}88

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

95
}96



浙公网安备 33010602011771号