在ASP.NET中,ListView控件是一个非常强大的数据展示工具,它支持多种数据绑定和展示方式。但是,当需要对ListView进行数据分页时,如果数据源是在代码中设置的,就需要特别注意一些细节。本文将介绍如何使用DataPager控件来实现ListView的数据分页,并展示相应的代码示例。
使用DataPager对ListView进行数据分页是非常简单的,只需要添加和配置数据源,添加ListView,设置ListView的数据源,再添加DataPager并配置它与ListView的关联即可。运行应用程序后,就可以享受分页带来的便利了。
当数据源在代码中设置时,需要使用DataPager来填充ListView。下面是一个简单的示例:
首先,需要添加一个ListView控件,如下所示:
<asp:ListView ID="ListViewProducts" runat="server" ItemPlaceholderID="ProductItem">
<ItemTemplate>
<div class="Product">
<strong>
<asp:Label runat="server" ID="LabelId" Text='<%# Eval("Id") %>'></asp:Label>::
<asp:Label runat="server" ID="LabelName" Text='<%# Eval("Name") %>'></asp:Label>
</strong>
<br />
<em>
<asp:Label runat="server" ID="LabelDescription" Text='<%# Eval("Description") %>'></asp:Label>
</em>
</div>
</ItemTemplate>
<LayoutTemplate>
<asp:PlaceHolder runat="server" ID="ProductItem"></asp:PlaceHolder>
</LayoutTemplate>
<ItemSeparatorTemplate>
<hr />
</ItemSeparatorTemplate>
</asp:ListView>
接下来,添加DataPager控件,并进行配置:
<asp:DataPager ID="DataPagerProducts" runat="server" PagedControlID="ListViewProducts" PageSize="3" OnPreRender="DataPagerProducts_PreRender">
<Fields>
<asp:NextPreviousPagerField ShowFirstPageButton="True" ShowNextPageButton="False"/>
<asp:NumericPagerField />
<asp:NextPreviousPagerField ShowLastPageButton="True" ShowPreviousPageButton="False"/>
</Fields>
</asp:DataPager>
在DataPager的OnPreRender事件中,需要填充ListView的数据:
protected void DataPagerProducts_PreRender(object sender, EventArgs e)
{
ProductList db = new ProductList();
this.ListViewProducts.DataSource = db.GetAll();
this.ListViewProducts.DataBind();
}
为了实现上述功能,定义了两个辅助类:Product类和ProductList类。
Product类代表一个产品项:
public class Product
{
private int? _Id;
private string _Name;
private string _Description;
public Product() { }
public Product(int Id, string Name, string Description)
{
this._Id = Id;
this._Name = Name;
this._Description = Description;
}
public int? Id
{
get { return _Id; }
set { _Id = value; }
}
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public string Description
{
get { return _Description; }
set { _Description = value; }
}
}
ProductList类代表一个数据库访问层:
public class ProductList
{
private IList<Product> _ProductDB = new List<Product>();
public ProductList()
{
this._ProductDB.Add(new Product(1, "Computer", "Complete hardware with software included."));
this._ProductDB.Add(new Product(2, "Kitchen Calendar", "Beautiful calendar for your kitchen."));
this._ProductDB.Add(new Product(3, "Shoes", "Most advanced anti-impact system in a small shoe."));
this._ProductDB.Add(new Product(4, "Pen", "What you think, must be written. This pen is your helper."));
this._ProductDB.Add(new Product(5, "Cell Phone", "Powerful communication thing. Today is part of your body. Get one more."));
}
public IList<Product> GetAll()
{
return this._ProductDB;
}
}