当前位置:首页>网络学院>程序开发>ASP.NET教程>文章内容

封装DataList的HtmlHelper对象

[ 来源:http://www.it55.com | 作者: | 时间:2008-01-03 | 收藏 | 推荐 ] 【

     
   每个开发者都想在不同的开发环境下封装功能来实现代码重用和提高开发速度,在WebForm中提供各式各样的控件;但如果在纯aspx下进行HTML表现那又如何办呢,在这里就介绍通过代码来封装一个DataList的HtmlHelper对象来达到其目的;虽然没有象服务控件那样有设计支持,但巧用匿名函数也可以实现自定义模板功能;其使用编写代码量几乎同于服务器控件。
  DataList的实现代码
  
  
  Code
   public class DataList<T> : IHtmlHelper
   {
   IHtmlHelper Members#region IHtmlHelper Members
  
   public void Render(System.IO.TextWriter writer)
   {
   Html32TextWriter html = new Html32TextWriter(writer);
   DataListItemArgs<T> e;
   html.WriteBeginTag("Table");
   html.WriteAttribute("class", Css);
   html.WriteAttribute("cellpadding", "0");
   html.WriteAttribute("cellspacing", "0");
   html.Write(">");
   html.WriteBeginTag("tr");
   html.Write(">");
   int row = 0;
   for (int i = 0; i < DataSource.Count; i++)
   {
   html.WriteBeginTag("td");
   html.WriteAttribute("class", ItemCss);
   html.Write(">");
   if (ItemBlock != null)
   {
   e = new DataListItemArgs<T>(i, row, DataSource[i]);
   ItemBlock(e);
   }
   html.WriteEndTag("td");
   if ((i + 1) % Columns == 0 || (i + 1) == DataSource.Count)
   {
   html.WriteEndTag("tr");
   }
   if ((i + 1) % Columns == 0 && (i + 1) != DataSource.Count)
   {
   html.WriteBeginTag("tr");
   html.Write(">");
   row++;
   }
   }
   html.WriteEndTag("Table");
   }
  
   #endregion
   public string Css
   {
   get;
   set;
   }
   public string ItemCss
   {
   get;
   set;
   }
   public IList<T> DataSource
   {
   get;
   set;
   }
   private int mColumns = 1;
   public int Columns
   {
   get
   {
   return mColumns;
   }
   set
   {
   mColumns = value;
   }
   }
   public Action<DataListItemArgs<T>> ItemBlock
   {
   get;
   set;
   }
  
   }
   public class DataListItemArgs<T> : EventArgs
   {
   public DataListItemArgs(int index, int row, T source)
   {
   Index = index;
   Row = row;
   mSorce = source;
   }
   public int Index
   {
   get;
   set;
   }
   public int Row
   {
   get;
   set;
   }
   private T mSorce;
   public T Source
   {
   get
   {
   return mSorce;
   }
   }
   }
  
  
  例程效果
  
  
  例程调用代码
  
  
  <%
  
   DataList<NorthWind.Entities.Files> list = new DataList<Files>();
  
   list.DataSource = view.Files;
  
   list.Columns = 4;
  
   list.ItemBlock = delegate(DataListItemArgs<Files> e)
  
   {
  
   %>
  
  
   <table style="border-style: dotted;border-width: 1px"><tr><td>
  
   <img style=" height:150px;width:150px" src=http://www.aspcool.com/lanmu/"FileLoad.aspx?id=<%=e.Source.ID %>" />

(编辑:IT资讯之家 www.it55.com

返回顶部
共2页: 上一页 1 [2] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]