ASP.NET WebForm 分页控件 AspNetPager 使用的简单示例
2012-03-31 16:17 音乐让我说 阅读(2372) 评论(0) 编辑 收藏 举报直接贴步骤了。
准备工作
去 http://www.webdiyer.com/ 下载 AspNetPager.dll
1. 在项目中添加对 AspNetPager.dll 的引用。
2. 在 web.config 文件中配置,这一步骤是可选的,如果跳过这一步,需要在每个需要分页的页面中 <%@ Register %> 一下。注意:下面的 web.config 配置是基于 ASP.NET 4.0 的。
<system.web>
<compilation debug="true" targetFramework="4.0" />
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
<controls>
<add tagPrefix="webdiyer" namespace="Wuqi.Webdiyer" assembly="AspNetPager"/>
</controls>
</pages>
</system.web>
3. 如图,建立一个 ASP.NET “皮肤”文件。
4. 编辑 AspNetPager.skin 文件。
<%-- PagingButtonSpacing="0px"
PagingButtonsClass="number"
FirstLastButtonsClass="number"
PrevNextButtonsClass="number"
UrlPaging="True"
--%>
<webdiyer:AspNetPager runat="server"
CssClass="anpager"
CurrentPageButtonClass="cpb"
FirstPageText="« 首页"
LastPageText="尾页»"
NextPageText="下一页 »"
PrevPageText="«上一页"
PageSize="2" >
</webdiyer:AspNetPager>
5. 在需要分页的页面的 <%@Page %> 指令中引入 <%@ Page StylesheetTheme="Default" %>
6. 在 ASP.NET WebForm 页面中:
<div>
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" OnPageChanging="AspNetPager1_PageChanging"></webdiyer:AspNetPager>
</div>
7. 后台代码如下(完整篇):
using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Text;
namespace ManagementWebUI
{
public partial class category : Page
{
/// <summary>
/// 加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 如果是 Url 分页,那么 Page_Load 事件执行完毕后,会自动调用分页控件的 AspNetPager1_PageChanging 事件。否则,如果是回发分页,那么就不会
if (!this.AspNetPager1.UrlPaging)
{
// 说明不是 Url 分页
LoadData();
}
}
}
/// <summary>
/// 加载数据
/// </summary>
protected void LoadData()
{
LoadData(null);
}
/// <summary>
/// 加载数据
/// </summary>
/// <param name="currentPageIndex">当前页码数</param>
protected void LoadData(int? currentPageIndex)
{
int pageIndex;
if (currentPageIndex.HasValue && currentPageIndex.Value > 0)
{
pageIndex = currentPageIndex.Value;
}
else
{
pageIndex = this.AspNetPager1.CurrentPageIndex;
}
int recordCount;
var query = CategoryBLL.GetEntitiesByPager(pageIndex, this.AspNetPager1.PageSize, /*new SearchCategory() { CategoryNameEquals = "我的种类" }, "Name_desc,ID_asc", */out recordCount);
this.AspNetPager1.RecordCount = recordCount;
if (query != null && query.Count > 0)
{
BindData(query);
}
else
{
// 没有数据,说明【当前 Url 参数传递的页码】超过了【分页控件最大的页码数】,所以这里重新查询一次,默认的数据来源与最后一页
if (recordCount > 0){LoadData();}else{BindData(null);}
}
}
/// <summary>
/// 绑定数据
/// </summary>
/// <param name="dataSource"></param>
private void BindData(IList<Category> dataSource)
{
rpList.DataSource = dataSource;
rpList.DataBind();
}
/// <summary>
/// 分页控件页码改变时
/// </summary>
/// <param name="src"></param>
/// <param name="e"></param>
protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
{
// 注意:由于利用 Url 来分页,页面没有回发,状态也就没有。
// 所以下面这段代码设置将失败,因为当前 this.AspNetPager1.RecordCount = 0,强制设置 this.AspNetPager1.CurrentPageIndex = 2(或者更大的数),都会失败
//this.AspNetPager1.CurrentPageIndex = e.NewPageIndex;
LoadData(e.NewPageIndex);
}
/// <summary>
/// 删除选中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnDeleteCheck_Click(object sender, EventArgs e)
{
string ids = Request.Form["chkId"];
List<int> ltId = ConvertUtility.ParseTypeBySplitWithComma<int>(ids);
string message;
int deleteSuccessCount = 0;
try
{
deleteSuccessCount = CategoryBLL.DeleteMore(ltId);
message = GetMessageOnDeleteMore(ltId.Count, deleteSuccessCount);
LoadData();
}
catch (Exception)
{
message = "尝试删除时失败,可能是一个或多个种类已经被引用了,请逐个删除!";
}
ShowMessage(message);
}
/// <summary>
/// 项命令事件
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
protected void rpList_ItemCommand(object source, RepeaterCommandEventArgs e)
{
switch (e.CommandName)
{
case "DeleteOne":
DealWithDeleteOne(Convert.ToInt32(e.CommandArgument));
break;
default:
break;
}
}
/// <summary>
/// 处理删除一项
/// </summary>
/// <param name="id">主键ID</param>
private void DealWithDeleteOne(int id)
{
string errorMessage;
bool flag = DeleteOne(id, out errorMessage);
ShowMessage(flag ? "删除成功!" : errorMessage);
LoadData();
}
/// <summary>
/// 处理删除一条记录
/// </summary>
/// <param name="id">主键ID</param>
/// <param name="errorMessage">返回的错误消息,如果返回值为 True,错误消息为 NULL</param>
/// <returns></returns>
private bool DeleteOne(int id, out string errorMessage)
{
errorMessage = null;
bool flag;
try
{
flag = CategoryBLL.DeleteById(id); // 如果 Id 不存在,则会返回 false
if(!flag)
{
errorMessage = "删除失败,可能该条记录已经被删除了!";
}
}
catch (Exception)
{
// 如果违反了外键约束,那么将会抛出异常
flag = false;
errorMessage = "删除失败,可能该种类已经被某个或多个专题引用了,请先删除这些专题!";
}
return flag;
}
}
}
效果图:
回发分页:
Url 分页:
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。