您的位置:首页 > 其它

GridView、DataList、Repeater三者之间的区别.doc

2011-05-17 16:54 501 查看
1、GridView表格控件
可以启用自动分页。
图例



源代码

<asp:GridViewID="GridView1"runat="server"AllowPaging="True"
AutoGenerateColumns="False"DataSourceID="odsBooks">
<Columns>

<asp:TemplateFieldHeaderText="Id"SortExpression="Id">
<EditItemTemplate>
<asp:TextBoxID="TextBox1"runat="server"Text='<%# Eval("Id") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:LabelID="Label3"runat="server"Text='<%# Eval("Id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundFieldDataField="Title"HeaderText="Title"SortExpression="Title"/>
<asp:TemplateFieldHeaderText="PublishDate"SortExpression="PublishDate">
<ItemTemplate>
<asp:LabelID="Label2"runat="server"Text='<%# Eval("PublishDate","{0:dd/MM/yyyy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundFieldDataField="ISBN"HeaderText="ISBN"SortExpression="ISBN"/>
<asp:TemplateFieldHeaderText="TOC"SortExpression="TOC">

<ItemTemplate>
<asp:LabelID="Label1"runat="server"Text='<%# Eval("Category.Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkFieldDataNavigateUrlFields="Id"
DataNavigateUrlFormatString="DetailBooks.aspx?id={0}"Text="详细"/>
</Columns>
</asp:GridView>
<asp:ObjectDataSourceID="odsBooks"runat="server"SelectMethod="GetAllBooks"
TypeName="BLL.BookManager"></asp:ObjectDataSource>

2、DataList 列表控件。
在每一行中可以添加复杂的表格。
不能自动分页,需要自己编写代码实现分页显示。
图例



源代码

前台页面BookList.aspx
<asp:LabelID="lblOrder"runat="server"Text="排序方式:">排序方式:</asp:Label>
<asp:ButtonID="btnOrderByDate"CssClass="btn"runat="server"Text="出版日期"
onclick="btnOrderByDate_Click"/>
<asp:ButtonID="btnOrderByPrice"CssClass="btn"runat="server"Text="价格"
onclick="btnOrderByPrice_Click"/>
<br/>
<asp:RepeaterID="Repeater1"runat="server"DataSourceID="odsBooks">
<HeaderTemplate>
<asp:ImageID="Image1"runat="server"ImageUrl="~/Image/byxcb.gif"/>
</HeaderTemplate>
<ItemTemplate>
<tablewidth="900px">
<tr>
<tdrowspan="4">
<ahref="BookDetail.aspx?id=<%# Eval("Id") %>"><imgsrc="../Image/<%# Eval("ISBN") %>.jpg"width="95"height="121"/></a>
</td>
<tdalign="center"><ahref="BookDetail.aspx?id=<%# Eval("Id") %>"><%# Eval("Title") %></a></td>
</tr>
<tr>
<td><%# Eval("Author") %></td>

</tr>
<tr>
<td><%# EnCode(Eval("ContentDescription"))%></td>
</tr>
<tr>
<tdalign="right"><strong>定价:¥<%# Eval("UnitPrice")%></strong></td>

</tr>
</table>
</ItemTemplate>
<SeparatorTemplate>
<hr/>
</SeparatorTemplate>
</asp:Repeater>
<asp:ObjectDataSourceID="odsBooks"runat="server"
SelectMethod="GetOrderedSmallBooksByCategoryId"TypeName="BLL.BookManager">
<SelectParameters>
<asp:ParameterDefaultValue="-1"Name="categoryId"Type="Int32"/>
<asp:ParameterDefaultValue=""Name="order"Type="String"/>
</SelectParameters>
</asp:ObjectDataSource>

<asp:LabelID="lblPages"runat="server"></asp:Label>
  <asp:ButtonID="btnPrev"runat="server"onclick="btnPrev_Click"CssClass="btn"Text="上一页"/>
 
<asp:ButtonID="btnNext"runat="server"onclick="btnNext_Click"CssClass="btn"Text="下一页"/>
 
<br/>

后台代码BookList.aspx.cs
public partial class 作业_BookList : System.Web.UI.Page
{
//创建分页对象
PagedDataSource psdBooks = new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["Page"] = 0;//分页号码
ViewState["Order"] = "";//排序条件
try
{
//分类ID
ViewState["CategoryId"] = Convert.ToInt32(Request.QueryString["CategoryId"]);
}
catch
{
ViewState["CategoryId"] = -1;
}
Databind();
}
}
/// <summary>
/// 分页
/// </summary>
private void Databind()
{
psdBooks.DataSource = BookManager.GetOrderedSmallBooksByCategoryId((int)ViewState["CategoryId"], ViewState["Order"].ToString());
psdBooks.AllowPaging = true;
psdBooks.CurrentPageIndex = Pager;
psdBooks.PageSize = 4;
lblPages.Text = string.Format("第{0}页 共{1}页",psdBooks.CurrentPageIndex+1,psdBooks.PageCount);
Repeater1.DataSourceID = "";
Repeater1.DataSource = psdBooks;
Repeater1.DataBind();
SetEnable();
}
/// <summary>
/// 置按钮是否可显示
/// </summary>
private void SetEnable()
{
btnPrev.Enabled = true;
btnNext.Enabled = true;
if (psdBooks.IsFirstPage)
{
btnPrev.Enabled = false;
}
if (psdBooks.IsLastPage)
{
btnNext.Enabled = false;
}
}
/// <summary>
/// 对字符串进行HTML编码并返回已编码的字符串
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public string EnCode(object obj)
{
return Server.HtmlEncode(obj as string);
}
/// <summary>
/// 页码
/// </summary>
private int Pager
{
get
{
return (int)ViewState["Page"];
}
set
{
ViewState["Page"] = value;
}
}
/// <summary>
/// 上一页按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnPrev_Click(object sender, EventArgs e)
{
Pager--;
Databind();
}
/// <summary>
/// 下一页按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnNext_Click(object sender, EventArgs e)
{
Pager++;
Databind();
}
/// <summary>
/// 按日期排序按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOrderByDate_Click(object sender, EventArgs e)
{
ViewState["Order"] = "PublishDate";
Databind();
}
/// <summary>
/// 按价格排序按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOrderByPrice_Click(object sender, EventArgs e)
{
ViewState["Order"] = "UnitPrice";
Databind();
}
}
3、Repeater
Repeater控件专门用于精确内容的显示,它也是基于模板的方式,不过它不会自动生成任何用于布局的代码。Repeater控件甚至没有一个默认的外观,它完全是通过模板来控制。而且也只能通过源代码视图进行模板的编辑。
与DataList相比可使用的模板更少。
Repeater控件由于不自动生成任何HTML代码,所以带来了效率上的提升。
不能自动分页,需要自己编写代码实现分页显示。
图例



源代码

前台页面RepeaterPage.aspx
<dl>
<dt>
<asp:Label ID="lblSort" runat="server" Text="排序方式:"></asp:Label>
<asp:Button ID="btnSortByDate" runat="server" Text="出版日期"
onclick="btnSortByDate_Click" />
<asp:Button ID="btnOrderByPrice" runat="server" Text="价格"
onclick="btnOrderByPrice_Click" />
</dt>
<dt>
<ul class="title_ul1">
<li class="title_booklist0">书名</li>
<li class="title_booklist1">作者</li>
<li class="title_booklist2">出版社</li>
<li class="title_booklist3">出版日期</li>
<li class="title_booklist4">价格</li>
</ul>
<asp:Repeater ID="rpBookList" runat="server">
<ItemTemplate>
<ul class="title_ul2">
<li class="title_booklist0"><%# Eval("Title")%></li>
<li class="title_booklist1"><%# Eval("Author") %></li>
<li class="title_booklist2"><%# Eval("Publisher.Name") %></li>
<li class="title_booklist3"><%# Eval("PublishDate")%></li>
<li class="title_booklist4"><%# Eval("UnitPrice")%></li>
</ul>
</ItemTemplate>
<AlternatingItemTemplate>
<ul class="title_ul3">
<li class="title_booklist0"><%# Eval("Title")%></li>
<li class="title_booklist1"><%# Eval("Author") %></li>
<li class="title_booklist2"><%# Eval("Publisher.Name") %></li>
<li class="title_booklist3"><%# Eval("PublishDate")%></li>
<li class="title_booklist4"><%# Eval("UnitPrice")%></li>
</ul>
</AlternatingItemTemplate>
</asp:Repeater>
<li>
<br />
<asp:Label ID="lblPages" runat="server"></asp:Label>
<asp:Button ID="btnPrev" runat="server" onclick="btnPrev_Click" Text="上一页" />
<asp:Button ID="btnNext" runat="server" onclick="btnNext_Click" Text="下一页" />
</li>
</dt>

</dl>

后台代码
public partial class RepeaterPage : System.Web.UI.Page
{
/// <summary>
/// 分页对象
/// </summary>
PagedDataSource psdPage = new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["Page"] = 0;//页数
ViewState["Order"] = "";//排序条件
try
{
ViewState["typeid"] = Convert.ToInt32(Request.QueryString["typeid"]);
}
catch
{
ViewState["typeid"] = -1;
}
Databind();
}
}
/// <summary>
/// 数据绑定
/// </summary>
private void Databind()
{
psdPage.AllowPaging = true;
psdPage.PageSize = 20;
psdPage.CurrentPageIndex = (int)ViewState["Page"];

psdPage.DataSource = BookManager.GetOrderedSmallBooksByCategoryId((int)ViewState["typeid"],ViewState["Order"].ToString());
lblPages.Text = "第" + (psdPage.CurrentPageIndex+1) + "页 共" + psdPage.PageCount + "页";
rpBookList.DataSource = psdPage;
rpBookList.DataBind();
SetEnable();
}
/// <summary>
/// 页码
/// </summary>
public int Pager
{
get
{
return (int)ViewState["Page"];
}
set
{
ViewState["Page"] = value;
}
}
/// <summary>
/// 置控件的使用状态
/// </summary>
private void SetEnable()
{
btnNext.Enabled = true;
btnPrev.Enabled = true;
if (psdPage.IsFirstPage)
btnPrev.Enabled = false;
if (psdPage.IsLastPage)
{
btnNext.Enabled = false;
}
}
/// <summary>
/// 上一页按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnPrev_Click(object sender, EventArgs e)
{
Pager--;
Databind();
}
/// <summary>
/// 下一页按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnNext_Click(object sender, EventArgs e)
{
Pager++;
Databind();
}
/// <summary>
/// 按日期排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSortByDate_Click(object sender, EventArgs e)
{
ViewState["Order"] = "PublishDate";
Pager = 0;
btnSortByDate.Enabled = false;
btnOrderByPrice.Enabled = true;
Databind();
}
/// <summary>
/// 按价格排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOrderByPrice_Click(object sender, EventArgs e)
{
ViewState["Order"] = "UnitPrice";
Pager = 0;
btnSortByDate.Enabled = true;
btnOrderByPrice.Enabled = false;
Databind();
}
}

总结
GridView、DataList、Repeater三者都可以展示数据记录。如果仅以简单的表格形式展示数据可以采用GridView控件,但若想以比较精细的方式展示数据,易采用DataList或Repeater,从执行效率上讲使用Repeater控件是最佳解决方案,因为该控件本身不会产生HTML代码,从而可以减小页面文件的大小,减少网络带宽资源的占用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: