您的位置:首页 > 编程语言 > ASP

关于AspNetPager 采用URL分页时 执行两次绑定的解决办法

2010-08-19 11:59 381 查看
先看代码:

<abw:AspNetPager ID="AspNetPager1" class="pager"  runat="server"
AlwaysShow="true" PageSize="2" OnPageChanged="AspNetPager1_PageChanged"
UrlPaging="True" NextPageText="Next&gt;&gt;" PrevPageText="&lt;&lt;Prev"
ShowFirstLast="False" ShowPageIndexBox="Never"
CurrentPageButtonStyle="margin-right:2px;" PagingButtonSpacing="">
</abw:AspNetPager>


using System;
using System.Collections.Generic;
using System.Web.UI;
using AutoBuildWeb.Service;

namespace AutoBuildWeb.Web.Manage.WebData.ArticleManage
{
public partial class News : WebBase.Data
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ArticlesInit();
}
}

/// <summary>
/// 初始化文章列表
/// </summary>
private void ArticlesInit()
{
int recordsCount;
string category = Request.QueryString["category"], key = Request.QueryString["key"];
int categoryId = string.IsNullOrEmpty(category) ? 0 : Convert.ToInt32(category);

if (!string.IsNullOrEmpty(key))
{
txtKeywords.Text = key;
}

IList<Object[]> list = ArticleSrv.GetArticles(categoryId, key, AspNetPager1.PageSize,
AspNetPager1.CurrentPageIndex, false, out recordsCount);

AspNetPager1.RecordCount = recordsCount;
rptArticle.DataSource = list;
rptArticle.DataBind();
}

protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
  ArticlesInit();
}
}
}


在Page_Load 和 AspNetPager 的OnPageChanged 的事件中都绑定的话,会执行两次查询。

原因是 采用URL分页时 在页面加载时AspNetPager会自动执行 OnPageChanged事件

解决方法:

一、 首先在Page_Load 中获取数据数 用于初始化AspNetPager,然后仅在AspNetPager 的OnPageChanged 的事件中进行数据绑定就可以了,

详细: /article/4655211.html

二、大多数分页存储过程都是数据和统计一起返回到,所以第一种方法比较麻烦,经过测试发现了第二种方法。

获取page参数并在绑定代码中初始化AspNetPager的CurrentPageIndex,数据绑定操作只需要在Page_Load或者AspNetPager 的OnPageChanged中绑定一次就可以了,

上边的代码中的page参数是在基类WebBase.Data中获取赋给一个CurrentPageIndex 属性

修改后

<abw:AspNetPager ID="AspNetPager1" class="pager"  runat="server"
AlwaysShow="true" PageSize="2"
UrlPaging="True" NextPageText="Next&gt;&gt;" PrevPageText="&lt;&lt;Prev"
ShowFirstLast="False" ShowPageIndexBox="Never"
CurrentPageButtonStyle="margin-right:2px;" PagingButtonSpacing="">
</abw:AspNetPager>


using System;
using System.Collections.Generic;
using System.Web.UI;
using AutoBuildWeb.Service;

namespace AutoBuildWeb.Web.Manage.WebData.ArticleManage
{
public partial class News : WebBase.Data
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ArticlesInit();
}
}

/// <summary>
/// 初始化文章列表
/// </summary>
private void ArticlesInit()
{
int recordsCount;
string category = Request.QueryString["category"], key = Request.QueryString["key"];
int categoryId = string.IsNullOrEmpty(category) ? 0 : Convert.ToInt32(category);

if (!string.IsNullOrEmpty(key))
{
txtKeywords.Text = key;
}

IList<Object[]> list = ArticleSrv.GetArticles(categoryId, key, AspNetPager1.PageSize,
CurrentPageIndex, false, out recordsCount);

AspNetPager1.RecordCount = recordsCount;
AspNetPager1.CurrentPageIndex = CurrentPageIndex;
rptArticle.DataSource = list;
rptArticle.DataBind();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: