自定义控件示范例
1
using System;
2
using System.Web.UI;
3
using System.Web.UI.WebControls;
4
using System.Web.UI.HtmlControls;
5
using System.ComponentModel;
6
using System.Text;
7
using System.Collections;
8
using System.Xml;
9
using FI.SqlEngine;
10
using System.Data;
11
12
namespace FIWebControls
13
{
14
/// <summary>
15
/// 产品分类列表组件
16
/// 1.支持从数据库中提取数据,用ListView的方式展示出来
17
/// 2.支持动态生成条件链接
18
/// 3.支持分页
19
/// 4.支持图片展示
20
/// 5.
21
/// </summary>
22
[Designer(typeof(ProductListDesigner)),
23
ToolboxData("<{0}:ProductList runat=server width=100% height=300></{0}:ProductList>")]
24
public class ProductList : System.Web.UI.WebControls.WebControl,IPostBackEventHandler,INamingContainer
25
{
26
private int _rows=6;
27
private int _cols=3;
28
private int _pageIndex=1;
29
30
31
private string _conditions="";
32
private string _fixedConditions="";
33
private string _orderString="";
34
private string _viewText="";
35
36
37
private int _pages;
38
39
40
private HtmlTableCell _pager=null;
41
private HtmlTableCell _pager1=null;
42
private XmlDocument _xd=null;
43
44
[Category("Event"),Browsable(true)]
45
public event EventHandler OnChangePageIndex;
46
47
/// <summary>
48
/// 配置文件
49
/// </summary>
50
[Category("Data"),Browsable(true)]
51
public string ConfigFile
52
{
53
get
54
{
55
if(null==ViewState["ConfigFile"]) return "";
56
else return ViewState["ConfigFile"].ToString();
57
}
58
set
59
{
60
ViewState["ConfigFile"]=value;
61
}
62
}
63
64
65
66
/// <summary>
67
/// 代码附加的动态条件
68
/// </summary>
69
[Category("Data"),Browsable(false)]
70
public string Conditions
71
{
72
get
73
{
74
return _conditions;
75
}
76
set
77
{
78
_conditions=value;
79
}
80
}
81
82
/// <summary>
83
/// 代码附加的固定条件
84
/// </summary>
85
[Category("Data"),Browsable(false)]
86
public string FixedConditions
87
{
88
get
89
{
90
if(null==ViewState["FixedConditions"]) return "";
91
else return ViewState["FixedConditions"].ToString();
92
}
93
set
94
{
95
ViewState["FixedConditions"]=value;
96
}
97
}
98
99
/// <summary>
100
/// 附加的排序字段
101
/// </summary>
102
[Category("Data"),Browsable(false)]
103
public string OrderString
104
{
105
get
106
{
107
if(null==ViewState["OrderString"]) return "";
108
else return ViewState["OrderString"].ToString();
109
}
110
set
111
{
112
ViewState["OrderString"]=value;
113
}
114
}
115
116
/// <summary>
117
/// 行数
118
/// </summary>
119
[Category("Appearance"),Browsable(true),DefaultValue(6)]
120
public int Rows
121
{
122
get
123
{
124
if(null==ViewState["Rows"]) return 6;
125
else return (int)ViewState["Rows"];
126
}
127
set
128
{
129
ViewState["Rows"]=value;
130
}
131
}
132
133
/// <summary>
134
/// 列数
135
/// </summary>
136
[Category("Appearance"),Browsable(true),DefaultValue(3)]
137
public int Cols
138
{
139
get
140
{
141
if(null==ViewState["Cols"]) return 3;
142
else return (int)ViewState["Cols"];
143
}
144
set
145
{
146
ViewState["Cols"]=value;
147
}
148
}
149
150
151
/// <summary>
152
/// 查看文字
153
/// </summary>
154
[Category("Appearance"),Browsable(true)]
155
public string ViewText
156
{
157
get
158
{
159
if(null==ViewState["ViewText"]) return "查看";
160
else return ViewState["ViewText"].ToString();
161
}
162
set
163
{
164
ViewState["ViewText"]=value;
165
}
166
}
167
168
/// <summary>
169
/// 分页控件的容器
170
/// </summary>
171
public HtmlTableCell Pager
172
{
173
set
174
{
175
_pager=value;
176
}
177
}
178
179
/// <summary>
180
/// 分页控件容器1
181
/// </summary>
182
public HtmlTableCell Pager1
183
{
184
set
185
{
186
_pager1=value;
187
}
188
}
189
190
/// <summary>
191
/// 处理回发事件
192
/// </summary>
193
/// <param name="eventArgument"></param>
194
public void RaisePostBackEvent(string eventArgument)
195
{
196
197
//选择查询方案
198
if(eventArgument.StartsWith("ChangePage"))
199
{
200
_pageIndex=int.Parse(eventArgument.Substring(10));
201
OnChangePageIndex(this,new EventArgs());
202
this.DataBind();
203
}
204
}
205
206
/// <summary>
207
///
208
/// </summary>
209
public override void DataBind()
210
{
211
212
GetConfigPrms();
213
StringBuilder sb=new StringBuilder(1024);
214
215
_xd=new XmlDocument();
216
_xd.Load(this.Page.Server.MapPath(ConfigFile));
217
string viewname=_xd.DocumentElement.Attributes["viewname"].Value;
218
string rowspacing=_xd.DocumentElement.Attributes["rowspacing"].Value;
219
string colspacing=_xd.DocumentElement.Attributes["colspacing"].Value;
220
221
string sql="SELECT * FROM "+viewname;
222
if(_fixedConditions.Length>0) sql+=" WHERE "+_fixedConditions;
223
if(_conditions.Length>0)
224
{
225
if(sql.IndexOf(" WHERE")!=-1)
226
{
227
sql+=" AND "+_conditions;
228
}
229
else
230
{
231
sql+=" WHERE "+_conditions;
232
}
233
}
234
if(_orderString.Length>0) sql+=" ORDER BY " +_orderString;
235
236
DataTable dt=DataAccess.GetDataTable(sql);
237
238
if(dt.Rows.Count>_rows*_cols && (_pager!=null || _pager1!=null)) //创建分页
239
{
240
StringBuilder sbp=new StringBuilder(512);
241
sbp.Append("<span>页次:");
242
_pages=(int)Math.Ceiling(dt.Rows.Count*1.0/(_cols*_rows));
243
for(int k=1;k<=_pages;++k)
244
{
245
if(k!=_pageIndex)
246
{
247
sbp.Append("<span class=\"a\" onclick=\"")
248
.Append(Page.GetPostBackEventReference(this,"ChangePage"+k.ToString())).Append("\">")
249
.Append(k).Append("</span> ");
250
}
251
else
252
{
253
sbp.Append("<span class=\"b\">").Append(k).Append("</span> ");
254
}
255
}
256
257
if(_pageIndex==0)
258
{
259
sbp.Append("<span class=\"b\">全部</span>");
260
}
261
else
262
{
263
sbp.Append("<span class=\"a\" onclick=\"")
264
.Append(Page.GetPostBackEventReference(this,"ChangePage0")).Append("\">")
265
.Append("全部").Append("</span>");
266
}
267
268
if(_pageIndex>1)
269
{
270
sbp.Append(" <img style=\"cursor:hand;\" align=\"absbottom\" src=\"../img/prevpage.gif\" onclick=\"")
271
.Append(Page.GetPostBackEventReference(this,"ChangePage"+(_pageIndex-1).ToString()))
272
.Append("\">");
273
}
274
if(_pageIndex<_pages)
275
{
276
sbp.Append(" <img style=\"cursor:hand;\" align=\"absbottom\" src=\"../img/nextpage.gif\" onclick=\"")
277
.Append(Page.GetPostBackEventReference(this,"ChangePage"+(_pageIndex+1).ToString()))
278
.Append("\">");
279
}
280
281
if(null!=_pager)
282
{
283
_pager.Controls.Add(new LiteralControl(sbp.ToString()));
284
}
285
286
if(null!=_pager1)
287
{
288
_pager1.Controls.Add(new LiteralControl(sbp.ToString()));
289
}
290
}
291
292
293
294
XmlNode xn_img=_xd.SelectSingleNode("//column[@type='img']");
295
string imgcolumn=xn_img.Attributes["name"].Value;
296
string imgclass=xn_img.Attributes["class"].Value;
297
string imgheight=xn_img.Attributes["height"].Value;
298
string imgwidth=xn_img.Attributes["width"].Value;
299
300
XmlNodeList xnl=_xd.SelectNodes("//column[@type!='img']");
301
sb.Append("<table cellpadding=0 spacing=0 border=0 width=100% style='table-layout:fixed;'><tr>");
302
303
int i=0;
304
foreach(DataRow dr in dt.Rows)
305
{
306
if(_pageIndex>0)
307
{
308
if(i<(_pageIndex-1)*_rows*_cols) {++i; continue;};
309
if(i>_pageIndex*_rows*_cols-1) break;
310
}
311
312
if(i%_cols==0)
313
{
314
sb.Append("<tr valign=\"top\"><td valign=\"top\" align=\"center\">");
315
sb.Append("<table cellspacing=\"").Append(rowspacing).Append("\" cellpadding=0 border=0 width=100% style='table-layout:fixed;'><tr valign=\"top\">");
316
317
}
318
sb.Append("<td width=\"").Append(100/_cols).Append("%\"><table cellspacing=\"").Append(colspacing).Append("\" cellpadding=0 border=0 width=100% style='table-layout:fixed;'>")
319
.Append("<tr style=\"height:").Append(imgheight).Append("\";width:").Append(imgwidth).Append("\"><td class=\"").Append(imgclass).Append("\">")
320
.Append("<img style=\"cursor:hand;width:").Append(imgwidth).Append(";height:").Append(imgheight).Append("\" src=\"").Append(dr[imgcolumn]).Append("\"")
321
.Append(" onclick=\"this_show_detail('").Append(dr["id"]).Append("');\">")
322
.Append("</td></tr>");
323
324
for(int j=0;j<xnl.Count;++j)
325
{
326
string column=xnl[j].Attributes["name"].Value;
327
sb.Append("<tr valign=\"top\"><td class=\"").Append(xnl[j].Attributes["class"].Value).Append("\">");
328
if(null!=xnl[j].Attributes["format"] && "money"==xnl[j].Attributes["type"].Value)
329
{
330
decimal money=0;
331
if(System.DBNull.Value!=dr[column]) money=(decimal)dr[column];
332
sb.Append("¥").Append(money.ToString("00.00"));
333
}
334
else
335
{
336
sb.Append(dr[column]);
337
}
338
sb.Append("</td></tr>");
339
}
340
sb.Append("<tr valign=\"top\"><td align=\"center\" class=\"pl_viewtext\"><a href=\"javascript:;\" onclick=\"this_show_detail('")
341
.Append(dr["id"]).Append("');\">")
342
.Append(_viewText).Append("</a></td></tr>");
343
sb.Append("</table></td>");
344
345
if(i%_cols==_cols-1 || i==dt.Rows.Count-1)
346
{
347
sb.Append("</tr></table></td></tr>");
348
}
349
++i;
350
}
351
352
sb.Append("</table>");
353
354
this.Controls.Add(new LiteralControl(sb.ToString()));
355
}
356
357
private void GetConfigPrms()
358
{
359
_rows=this.Rows;
360
_cols=this.Cols;
361
_viewText=this.ViewText;
362
_fixedConditions=this.FixedConditions;
363
_conditions=this.Conditions;
364
_orderString=this.OrderString;
365
366
}
367
}
368
}
369
using System;2
using System.Web.UI;3
using System.Web.UI.WebControls;4
using System.Web.UI.HtmlControls;5
using System.ComponentModel;6
using System.Text;7
using System.Collections;8
using System.Xml;9
using FI.SqlEngine;10
using System.Data;11

12
namespace FIWebControls13
{14
/// <summary>15
/// 产品分类列表组件16
/// 1.支持从数据库中提取数据,用ListView的方式展示出来17
/// 2.支持动态生成条件链接18
/// 3.支持分页19
/// 4.支持图片展示20
/// 5.21
/// </summary>22
[Designer(typeof(ProductListDesigner)),23
ToolboxData("<{0}:ProductList runat=server width=100% height=300></{0}:ProductList>")]24
public class ProductList : System.Web.UI.WebControls.WebControl,IPostBackEventHandler,INamingContainer25
{26
private int _rows=6;27
private int _cols=3;28
private int _pageIndex=1;29
30
31
private string _conditions="";32
private string _fixedConditions="";33
private string _orderString="";34
private string _viewText="";35

36

37
private int _pages;38

39
40
private HtmlTableCell _pager=null;41
private HtmlTableCell _pager1=null;42
private XmlDocument _xd=null;43

44
[Category("Event"),Browsable(true)]45
public event EventHandler OnChangePageIndex;46

47
/// <summary>48
/// 配置文件49
/// </summary>50
[Category("Data"),Browsable(true)]51
public string ConfigFile52
{53
get54
{55
if(null==ViewState["ConfigFile"]) return "";56
else return ViewState["ConfigFile"].ToString();57
}58
set59
{60
ViewState["ConfigFile"]=value; 61
}62
}63

64
65

66
/// <summary>67
/// 代码附加的动态条件68
/// </summary>69
[Category("Data"),Browsable(false)]70
public string Conditions71
{72
get73
{74
return _conditions;75
}76
set77
{78
_conditions=value;79
}80
}81

82
/// <summary>83
/// 代码附加的固定条件84
/// </summary>85
[Category("Data"),Browsable(false)]86
public string FixedConditions87
{88
get89
{90
if(null==ViewState["FixedConditions"]) return "";91
else return ViewState["FixedConditions"].ToString();92
}93
set94
{95
ViewState["FixedConditions"]=value;96
}97
}98

99
/// <summary>100
/// 附加的排序字段101
/// </summary>102
[Category("Data"),Browsable(false)]103
public string OrderString104
{105
get106
{107
if(null==ViewState["OrderString"]) return "";108
else return ViewState["OrderString"].ToString();109
}110
set111
{112
ViewState["OrderString"]=value;113
}114
}115
116
/// <summary>117
/// 行数118
/// </summary>119
[Category("Appearance"),Browsable(true),DefaultValue(6)]120
public int Rows121
{122
get123
{124
if(null==ViewState["Rows"]) return 6;125
else return (int)ViewState["Rows"];126
}127
set128
{129
ViewState["Rows"]=value;130
}131
}132

133
/// <summary>134
/// 列数135
/// </summary>136
[Category("Appearance"),Browsable(true),DefaultValue(3)]137
public int Cols138
{139
get140
{141
if(null==ViewState["Cols"]) return 3;142
else return (int)ViewState["Cols"];143
}144
set145
{146
ViewState["Cols"]=value;147
}148
}149

150
151
/// <summary>152
/// 查看文字153
/// </summary>154
[Category("Appearance"),Browsable(true)]155
public string ViewText156
{157
get158
{159
if(null==ViewState["ViewText"]) return "查看";160
else return ViewState["ViewText"].ToString();161
}162
set163
{164
ViewState["ViewText"]=value;165
}166
}167
168
/// <summary>169
/// 分页控件的容器170
/// </summary>171
public HtmlTableCell Pager172
{173
set174
{175
_pager=value;176
}177
}178

179
/// <summary>180
/// 分页控件容器1181
/// </summary>182
public HtmlTableCell Pager1183
{184
set185
{186
_pager1=value;187
}188
}189
190
/// <summary>191
/// 处理回发事件192
/// </summary>193
/// <param name="eventArgument"></param>194
public void RaisePostBackEvent(string eventArgument)195
{ 196

197
//选择查询方案198
if(eventArgument.StartsWith("ChangePage"))199
{200
_pageIndex=int.Parse(eventArgument.Substring(10));201
OnChangePageIndex(this,new EventArgs());202
this.DataBind();203
}204
}205

206
/// <summary>207
/// 208
/// </summary>209
public override void DataBind()210
{211

212
GetConfigPrms();213
StringBuilder sb=new StringBuilder(1024);214

215
_xd=new XmlDocument();216
_xd.Load(this.Page.Server.MapPath(ConfigFile));217
string viewname=_xd.DocumentElement.Attributes["viewname"].Value;218
string rowspacing=_xd.DocumentElement.Attributes["rowspacing"].Value;219
string colspacing=_xd.DocumentElement.Attributes["colspacing"].Value;220

221
string sql="SELECT * FROM "+viewname;222
if(_fixedConditions.Length>0) sql+=" WHERE "+_fixedConditions;223
if(_conditions.Length>0)224
{225
if(sql.IndexOf(" WHERE")!=-1)226
{227
sql+=" AND "+_conditions;228
}229
else230
{231
sql+=" WHERE "+_conditions;232
}233
}234
if(_orderString.Length>0) sql+=" ORDER BY " +_orderString;235

236
DataTable dt=DataAccess.GetDataTable(sql);237
238
if(dt.Rows.Count>_rows*_cols && (_pager!=null || _pager1!=null)) //创建分页239
{240
StringBuilder sbp=new StringBuilder(512);241
sbp.Append("<span>页次:");242
_pages=(int)Math.Ceiling(dt.Rows.Count*1.0/(_cols*_rows));243
for(int k=1;k<=_pages;++k)244
{245
if(k!=_pageIndex)246
{247
sbp.Append("<span class=\"a\" onclick=\"")248
.Append(Page.GetPostBackEventReference(this,"ChangePage"+k.ToString())).Append("\">")249
.Append(k).Append("</span> ");250
}251
else252
{253
sbp.Append("<span class=\"b\">").Append(k).Append("</span> ");254
}255
}256
257
if(_pageIndex==0)258
{259
sbp.Append("<span class=\"b\">全部</span>");260
}261
else262
{263
sbp.Append("<span class=\"a\" onclick=\"")264
.Append(Page.GetPostBackEventReference(this,"ChangePage0")).Append("\">")265
.Append("全部").Append("</span>");266
}267
268
if(_pageIndex>1) 269
{270
sbp.Append(" <img style=\"cursor:hand;\" align=\"absbottom\" src=\"../img/prevpage.gif\" onclick=\"")271
.Append(Page.GetPostBackEventReference(this,"ChangePage"+(_pageIndex-1).ToString()))272
.Append("\">");273
}274
if(_pageIndex<_pages)275
{276
sbp.Append(" <img style=\"cursor:hand;\" align=\"absbottom\" src=\"../img/nextpage.gif\" onclick=\"")277
.Append(Page.GetPostBackEventReference(this,"ChangePage"+(_pageIndex+1).ToString()))278
.Append("\">");279
}280
281
if(null!=_pager)282
{283
_pager.Controls.Add(new LiteralControl(sbp.ToString()));284
}285
286
if(null!=_pager1)287
{288
_pager1.Controls.Add(new LiteralControl(sbp.ToString()));289
}290
}291

292
293

294
XmlNode xn_img=_xd.SelectSingleNode("//column[@type='img']");295
string imgcolumn=xn_img.Attributes["name"].Value;296
string imgclass=xn_img.Attributes["class"].Value;297
string imgheight=xn_img.Attributes["height"].Value;298
string imgwidth=xn_img.Attributes["width"].Value;299

300
XmlNodeList xnl=_xd.SelectNodes("//column[@type!='img']");301
sb.Append("<table cellpadding=0 spacing=0 border=0 width=100% style='table-layout:fixed;'><tr>");302

303
int i=0;304
foreach(DataRow dr in dt.Rows)305
{306
if(_pageIndex>0)307
{308
if(i<(_pageIndex-1)*_rows*_cols) {++i; continue;};309
if(i>_pageIndex*_rows*_cols-1) break;310
}311

312
if(i%_cols==0)313
{314
sb.Append("<tr valign=\"top\"><td valign=\"top\" align=\"center\">");315
sb.Append("<table cellspacing=\"").Append(rowspacing).Append("\" cellpadding=0 border=0 width=100% style='table-layout:fixed;'><tr valign=\"top\">");316
317
}318
sb.Append("<td width=\"").Append(100/_cols).Append("%\"><table cellspacing=\"").Append(colspacing).Append("\" cellpadding=0 border=0 width=100% style='table-layout:fixed;'>")319
.Append("<tr style=\"height:").Append(imgheight).Append("\";width:").Append(imgwidth).Append("\"><td class=\"").Append(imgclass).Append("\">")320
.Append("<img style=\"cursor:hand;width:").Append(imgwidth).Append(";height:").Append(imgheight).Append("\" src=\"").Append(dr[imgcolumn]).Append("\"")321
.Append(" onclick=\"this_show_detail('").Append(dr["id"]).Append("');\">")322
.Append("</td></tr>");323

324
for(int j=0;j<xnl.Count;++j)325
{326
string column=xnl[j].Attributes["name"].Value;327
sb.Append("<tr valign=\"top\"><td class=\"").Append(xnl[j].Attributes["class"].Value).Append("\">");328
if(null!=xnl[j].Attributes["format"] && "money"==xnl[j].Attributes["type"].Value)329
{330
decimal money=0;331
if(System.DBNull.Value!=dr[column]) money=(decimal)dr[column];332
sb.Append("¥").Append(money.ToString("00.00"));333
}334
else335
{336
sb.Append(dr[column]);337
}338
sb.Append("</td></tr>");339
}340
sb.Append("<tr valign=\"top\"><td align=\"center\" class=\"pl_viewtext\"><a href=\"javascript:;\" onclick=\"this_show_detail('")341
.Append(dr["id"]).Append("');\">")342
.Append(_viewText).Append("</a></td></tr>");343
sb.Append("</table></td>");344
345
if(i%_cols==_cols-1 || i==dt.Rows.Count-1)346
{347
sb.Append("</tr></table></td></tr>");348
}349
++i;350
}351

352
sb.Append("</table>");353

354
this.Controls.Add(new LiteralControl(sb.ToString()));355
}356

357
private void GetConfigPrms()358
{359
_rows=this.Rows;360
_cols=this.Cols;361
_viewText=this.ViewText;362
_fixedConditions=this.FixedConditions;363
_conditions=this.Conditions;364
_orderString=this.OrderString;365
366
}367
}368
}369



浙公网安备 33010602011771号