---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等, 而且有时候我们需要对DataList和Repeater甚至自定义数据绑定控件进行分页,手工编写分页代码不但技术难度大、任务繁琐而且代码重用率极低,因此分页已成为许多ASP.NET程序员最头疼的问题之一。
AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方, 如为GridView、DataList以及Repeater等数据绑定控件实现分页、呈现自定义的分页数据以及制作图片浏览程序等,因为AspNetPager控件和数据是独立的,因此要分页的数据可以来自任何数据源,如SQL Server、Oracle、Access、mysql、DB2等数据库以及XML文件、内存数据或缓存中的数据、文件系统等等。
AspNetPager的主要功能有:
1、支持通过Url进行分页: AspNetPager除提供默认的类似于DataGrid和GridView的PostBack分页方式外,还支持通过Url进行分页,象大多数asp程序中分页一样, Url分页方式允许用户通过在浏览器地址栏中输入相应的地址即可直接进入指定页面,也可以使搜索引擎搜索到所有分页的页面的内容,因此具有用户友好和搜索引擎友好的优点, 关于Url分页与PostBack分页方式的差异,请参考Url与PostBack分页方式的对比。
2、支持Url分页方式下的Url重写(UrlRewrite)功能 Url重写技术可以使显示给用户的Url不同于实际的Url,Url重写技术被广泛应用于搜索引擎优化(SEO)、网站重组后重定向页面路径以及提供用户友好的Url等方面, AspNetPager支持Url重写技术使您可以自定义分页导航的Url格式,实现Url重写;
3、支持使用用户自定义图片做为导航元素: 您可以使用自定义的图片文件做为分页控件的导航元素,而不仅仅限于显示文字内容。
4、功能强大灵活、使用方便、可定制性强: AspNetPager分页控件的所有导航元素都可以由用户进行单独控制,从6.0版起,AspNetPager支持使用主题(Theme)与皮肤(Skin)统一控件的整体样式, 配合asp.net 2.0中的DataSource控件,AspNetPager只需要编写短短几行代码,甚至无需编写任何代码,只需设置几个属性就可以实现分页功能。
5、增强的 Visual Studio 2005、Visual Studio 2008和Visual Studio 2010设计时支持 增强的设计时支持使控件在设计时更加直观,易于使用,开发快捷方便。 6、兼容IE6.0+及FireFox 1.5+等浏览器
举例应用如下:
创建存储过程:
create PROCEDURE [dbo].[P_GetPagedOrders]
(
@startIndex int,
@pageSize int
AS BEGIN
select * from( select ROW_NUMBER() over(Order By OrderDate)Row, o.OrderID, o.OrderDate, o.CustomerID, c.CustomerName from Orders o inner join Customers c on o.CustomerID = c.CustomerID )as orderList where orderList.Row between @startIndex and @startIndex + @pageSize - 1
END
)
后台调用存储过程:
private static string connStr = ConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand command = new SqlCommand("P_GetOrderNumber", conn))
{
command.CommandType = CommandType.StoredProcedure;
int totalOrders = (int)command.ExecuteScalar();
AspNetPager1.RecordCount = totalOrders;
}
}
bindData();
}
}
public void AspNetPager1_PageChanged(object src, EventArgs e)
{
bindData();
}
private void bindData()
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter("P_GetPagedOrders", conn);
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
adapter.SelectCommand.Parameters.Add("@startIndex", SqlDbType.Int).Value = AspNetPager1.StartRecordIndex; adapter.SelectCommand.Parameters.Add("@pageSize", SqlDbType.Int).Value = AspNetPager1.PageSize;
DataSet ds = new DataSet();
adapter.Fill(ds, "orders");
RepeaterPagedOrders.DataSource = ds.Tables["orders"];
RepeaterPagedOrders.DataBind();
AspNetPager1.CustomInfoHTML = "记录总数:<b>" + AspNetPager1.RecordCount.ToString() + "</b>"; AspNetPager1.CustomInfoHTML += " 总页数:<b>" + AspNetPager1.PageCount.ToString() + "</b>"; AspNetPager1.CustomInfoHTML += " 当前页:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font><br>";
}
}
前台调用:在AspNetPager 7.1以上版本中,取消了ShowInputBox,改为ShowPageIndexBox,相应的为TextBeforePageIndexBox,TextAfterPageIndexBox <div style="width:50%; "> <webdiyer:AspNetPager ID="AspNetPager1" runat="server" HorizontalAlign="Center" PageSize="8" OnPageChanged="AspNetPager1_PageChanged" UrlPaging="true" ShowCustomInfoSection="Left" NumericButtonTextFormatString="[{0}]" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" SubmitButtonText="确定" SubmitButtonClass="submitBtn" TextBeforePageIndexBox="转到第" TextAfterPageIndexBox="页" AlwaysShow="true" ShowPageIndexBox="Always"> ></webdiyer:AspNetPager>
<br /> <table border="1" width="85%"> <tr><th>OrderID</th><th>OrderDate</th><th>CustomerID</th><th>CustomerName</th></tr> <asp:Repeater ID="RepeaterPagedOrders" runat="server"> <ItemTemplate> <tr> <td><%#Eval("OrderID") %></td> <td><%#Eval("OrderDate") %></td> <td><%#Eval("CustomerID")%></td> <td><%#Eval("CustomerName")%></td> </tr> </ItemTemplate> </asp:Repeater> </table> </div>
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------