1. 程式人生 > >GridView中動態新增模板列和其子控制元件集合

GridView中動態新增模板列和其子控制元件集合

1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Linq;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.HtmlControls;
9 using System.Web.UI.WebControls;
10 using System.Web.UI.WebControls.WebParts;
11 using System.Xml.Linq;
12 13 namespace Test.WebControls.GridView.MyTemplateColumn
14 {
15 publicclass MyTmeplateColumn:ITemplate
16 {
17 ///<summary> 18 /// 委託
19 ///</summary> 20 ///<param name="sender"></param> 21 ///<param name="e"></param> 22 publicdelegatevoid EventHandler(object sender, EventArgs e);
23 ///<summary> 24 /// 事件
25 ///</summary> 26 publicevent EventHandler eh;
27 ///<summary> 28 /// 模板列的型別
29 ///</summary> 30 private DataControlRowType templateType;
31 32 ///<summary> 33 /// 資料繫結列的標題
34 ///</summary> 35 privatestring HeaderText;
36 ///<summary> 37 /// 模板列控制元件物件的集合<控制元件ID, 控制元件物件>
38 ///</summary> 39 private System.Collections.Generic.Dictionary<string, ControlField> ControlsFieldList;
40 41 public MyTmeplateColumn(DataControlRowType type, string headerText)
42 {
43 this.templateType = type;
44 this.HeaderText = headerText;
45 }
46 47 public MyTmeplateColumn(DataControlRowType type, string headerText, System.Collections.Generic.Dictionary<string, ControlField> ControlsFieldList)
48 {
49 this.templateType = type;
50 this.HeaderText = headerText;
51 this.ControlsFieldList = ControlsFieldList;
52 }
53 54 ///<summary> 55 /// 進行資料繫結
56 ///</summary> 57 ///<param name="container"></param> 58 publicvoid InstantiateIn(System.Web.UI.Control container)
59 {
60 switch (templateType)
61 {
62 case DataControlRowType.Header:
63 {
64 if (this.ControlsFieldList !=null&&this.ControlsFieldList.Count >0)
65 {
66 for (int i =0; i <this.ControlsFieldList.Count; i++)
67 {
68 string ID =this.ControlsFieldList.Keys.ToArray()[i].ToString().Trim();
69 ControlField controlField =this.ControlsFieldList[ID];
70 71 // 執行資料繫結 72 System.Web.UI.Control control = controlField.UIControl;
73 if (control !=null&& controlField !=null)
74 {
75 //control.DataBinding += new System.EventHandler(ControlFieldDataBinding); 76 container.Controls.Add(control);
77 }
78 }
79 }
80 81 Literal lc =new Literal();
82 lc.Text =this.HeaderText;
83 container.Controls.Add(lc);
84 85 break;
86 }
87 case DataControlRowType.DataRow:
88 {
89 90 if (this.ControlsFieldList !=null&&this.ControlsFieldList.Count >0)
91 {
92 for (int i =0; i <this.ControlsFieldList.Count; i++)
93 {
94 string ID =this.ControlsFieldList.Keys.ToArray()[i].ToString().Trim();
95 ControlField controlField =this.ControlsFieldList[ID];
96 97 // 執行資料繫結 98 System.Web.UI.Control control = controlField.UIControl;
99 if (control !=null&& controlField !=null)
100 {
101 control.DataBinding +=new System.EventHandler(ControlFieldDataBinding);
102 container.Controls.Add(control);
103 }
104 }
105 }
106 break;
107 }
108 default:
109 {
110 break;
111 }
112 }
113 }
114 115 ///<summary>116 /// ControlField的物件進行資料繫結
117 ///</summary>118 ///<param name="controlField"></param>119 publicvoid ControlFieldDataBinding(object sender, EventArgs e)
120 {
121 GridViewRow container =null;
122 ControlField controlField =null;
123 124 string control_type = sender.GetType().Name;
125 string control_id ="";
126 switch (control_type)
127 {
128 case"Label":
129 {
130 control_id = (sender as Label).ID.Trim();
131 break;
132 }
133 case"TextBox":
134 {
135 control_id = (sender as TextBox).ID.Trim();
136 break;
137 }
138 case"LinkButton":
139 {
140 control_id = (sender as LinkButton).ID.Trim();
141 break;
142 }
143 case"Button":
144 {
145 control_id = (sender as Button).ID.Trim();
146 break;
147 }
148 case"DropDownList":
149 {
150 control_id = (sender as DropDownList).ID.Trim();
151 break;
152 }
153 case"CheckBox":
154 {
155 control_id = (sender as CheckBox).ID.Trim();
156 break;
157 }
158 case"RadioButton":
159 {
160 control_id = (sender as RadioButton).ID.Trim();
161 break;
162 }
163 }
164 if (control_id !="")
165 {
166 controlField =this.ControlsFieldList[control_id];
167 }
168 169 170 if (controlField !=null)
171 {
172 // 轉化子控制元件173 System.Collections.Generic.Dictionary<string, string> fields =null;// <property, key> = <伺服器控制元件屬性名稱, 屬性繫結資料欄位>174 string property ="";//伺服器控制元件屬性名稱175 string key ="";//屬性繫結資料欄位176 string value =""; //臨時變數
177 //
178 switch (controlField.ControlType)
179 {
180 #region 按控制元件類別,進行資料繫結181 case ControlTypeEnum.Label:
182 {
183 #region Label DataBinding184 Label obj = controlField.UIControl as Label;
185 container = obj.NamingContainer as GridViewRow;
186 187 if (obj !=null&& container !=null)
188 {
189 if (obj !=null&& controlField.Fields !=null&& controlField.Fields.Count >0)
190 {
191 fields = controlField.Fields;
192 for (int i =0; i < fields.Count; i++)
193 {
194 property = fields.Keys.ToArray()[i];
195 if (property !=null&& property.Trim() !="")
196 {
197 key = fields[property];
198 value = DataBinder.Eval(container.DataItem, key).ToString().Trim();