代码改变世界

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
="&laquo; 首页"
LastPageText
="尾页&raquo;"
NextPageText
="下一页 &raquo;"
PrevPageText
="&laquo;上一页"
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 分页:

 

谢谢浏览!