就分页的技术来看,无非是分两种:
一。通过存储过程来实现
此点,暂时不讲,因为网上文章很多,迟一下再发表我的意见。
二。通过页面代码来实现
我之前在网上看到一个文章,说的是为DATALIST分页,用的技术是viewstate保存分页信息,然后再通过这个信息(如当前是第几页,每页多少等)来实现分页。虽然能实现功能,不过,这一点明显是多此一举,究其原因,是由于没有深入认识。NET。其实。NET本身有一个PagedDataSource,它是从GridView里分离出来的分页代码封装,可以轻松实现分页。下面,就以DATALIST作为例子,看一下,他是怎样使用的:
=====================前台
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="100%" valign=top>
<asp:DataGrid ID="dg1" AutoGenerateColumns="False" CellPadding="0" CellSpacing="0" PageSize="20" runat="server" Width="100%" AllowPaging="True" ><HeaderStyle Height="30px" CssClass="topbg" HorizontalAlign="Center" /><ItemStyle BackColor="#F6F6F6" Height="25px" HorizontalAlign="Center" /><Columns><asp:TemplateColumn HeaderText="选 择"><ItemTemplate ><input id="YX_CH" name="YX_CH" type="checkbox" style="border:0 " value="<%# Eval("YX_ID") %>" />
</ItemTemplate>
<HeaderStyle CssClass="B" />
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="I D"><ItemTemplate ><%# Eval("YX_ID") %></ItemTemplate>
<HeaderStyle CssClass="B" /></asp:TemplateColumn>
<asp:TemplateColumn HeaderText="品牌名称"><ItemTemplate ><%# Eval("YX_PinPaiName")%></ItemTemplate>
<HeaderStyle CssClass="B" /></asp:TemplateColumn>
<asp:TemplateColumn HeaderText="操 作"><ItemTemplate ><a href="YX_EditPinPai.aspx?YX_FS=Edit&YX_MID=<%#Eval("YX_ID")%>"><img src="../../images/icon_edit.gif" style="border:0" alt="编辑" /></a>
<a href="?YX_FS=Del&YX_MID=<%#Eval("YX_ID")%>"><img src="../../images/no.gif" style="border:0" alt="删除" /></a>
</ItemTemplate>
<HeaderStyle CssClass="B" />
</asp:TemplateColumn>
</Columns>
<PagerStyle Visible="False" />
</asp:DataGrid>
</td>
</tr>
<tr>
<td valign=top> <table border="0" cellpadding="0" cellspacing="0" style="width: 100%">
<tr bgcolor="#E7E7E7">
<td align="center" bgcolor="#E7E7E7" style="width: 900px;color:#000000; height: 22px;">
<asp:Label ID="Label1" CssClass="font1" runat="server" Text="Label"></asp:Label><asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:HyperLink ID="start" runat="server" ForeColor="#000000">首 页</asp:HyperLink>
<asp:HyperLink ID="prev" runat="server" ForeColor="#000000"> 上一页</asp:HyperLink>
<asp:HyperLink ID="next" runat="server" ForeColor="#000000">下一页</asp:HyperLink>
<asp:HyperLink ID="max" runat="server" ForeColor="#000000">末 页</asp:HyperLink><span class="font1">转向</span>
<asp:DropDownList ID="iPage" runat="server" AutoPostBack="True" OnSelectedIndexChanged="sic"></asp:DropDownList> <input id="chkall" type="checkbox" onClick="CheckAll(this.form)" style="border:0 " />全选</td>
<td align="left" style="width: 50px; height: 22px;">
</td><td align="left" bgcolor="#E7E7E7" style="width: 180px; height: 22px;">
</td>
<td align="center" style="width: 50px; height: 22px;">
</td>
</tr>
</table></td>
</tr></table>
===============================后台
using System.Web.UI.WebControls; //命名空间
/// <summary>
/// grid数据绑定
/// </summary>
private void bind()
{
try
{
Exsql.Open();
string sql = "select * from YX_PinPai";
ChangHope_DB Chp = new ChangHope_DB();
DataSet ds = Chp.Db_ds(sql, "YX_PinPai");
this.dg1.DataSource = datalistbind(ds); //分页数据绑定
this.dg1.DataBind();
}
catch (Exception ee)
{
Response.Write(ee.Message);
}
finally
{
Exsql.Close();
}
}
/// <summary>
/// 分页数据绑定
/// </summary>
/// <param name="dst"></param>
/// <returns></returns>
private PagedDataSource datalistbind(DataSet dst)
{
PagedDataSource objpage = new PagedDataSource();
objpage.DataSource = dst.Tables[0].DefaultView;
objpage.AllowPaging = true;
//dg1.PageSize = 20;
objpage.PageSize = 20;
int CurPage;
//判断是否有分页的请求
///
if (Request["iPage"] != null)
{
CurPage = Convert.ToInt32(Request["iPage"]);
}
else
{
CurPage = 1;
}
//设置当前页;
objpage.CurrentPageIndex = CurPage - 1;
Label1.Text = "当前页:第" + CurPage.ToString() + "/" + objpage.PageCount + "页";
Label2.Text = "共有" + objpage.DataSourceCount + "条记录 " + objpage.PageSize + "/页";
//判断不是第一页的时候
if (!objpage.IsFirstPage)
{
this.prev.NavigateUrl = Request.CurrentExecutionFilePath + "?iPage=" + (Convert.ToInt32(CurPage) - 1);
}
this.start.NavigateUrl = Request.CurrentExecutionFilePath + "?iPage=1";
//判断不是最后一页的时候
if (!objpage.IsLastPage)
{
this.next.NavigateUrl = Request.CurrentExecutionFilePath + "?ipage=" + (Convert.ToInt32(CurPage) + 1);
}
this.max.NavigateUrl = Request.CurrentExecutionFilePath + "?iPage=" + objpage.PageCount;
if (!IsPostBack)
{
for (int i = 1; i < objpage.PageCount + 1; i++)
{
this.iPage.Items.Add(new ListItem(i.ToString() + "页", i.ToString()));
}
}
return objpage;
}