欢迎大家访问我的BLOG,我会多多的出原创文章,希望大家支持我,为我祈祷,让我实现我的三个梦想!再30岁能成为一个名优秀的软件架构师!

自定义控件示范例

  1using System;
  2using System.Web.UI;
  3using System.Web.UI.WebControls;
  4using System.Web.UI.HtmlControls;
  5using System.ComponentModel;
  6using System.Text;
  7using System.Collections;
  8using System.Xml;
  9using FI.SqlEngine;
 10using System.Data;
 11
 12namespace 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>&nbsp;");
250                    }

251                    else
252                    {
253                        sbp.Append("<span class=\"b\">").Append(k).Append("</span>&nbsp;");
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("&nbsp;<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("&nbsp;<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-1break;
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

posted on 2006-07-12 15:51  程序缘  阅读(183)  评论(0)    收藏  举报

导航