[ 来源: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)