ASP.NET 使用AspNetPager进行分页,查询条件丢失问题

如下图,查询出所有数据分页时,点击【下页】,分页正常。但是,根据查询条件查询过滤数据后,点击【下页】,显示的还所有数据时的分页。我设了断点,查询数据后点击【下页】,查询条... 如下图,查询出所有数据分页时,点击【下页】,分页正常。但是,根据查询条件查询过滤数据后,点击【下页】,显示的还所有数据时的分页。我设了断点,查询数据后点击【下页】,查询条件如【用户类别】的值还是查询全部数据时的值,没有变化。此时,查询条件丢失了。 展开
 我来答
stydfans
2013-12-30 · TA获得超过668个赞
知道小有建树答主
回答量:1263
采纳率:100%
帮助的人:515万
展开全部

这个问题很典型,处理方法也很简单。


先说说你为什么会遇到这个问题:

  1. 在页面初始加载的时候,就会对这个GridView进行一次全数据的绑定操作;

  2. 当你点击查询的时候,首先,页面会以POSTBACK的方式进行提交数据;

  3. 页面控制程序会根据这个页面的数据加载规则进行数据的加载或重新绑定的操作;

到这里,就很容易看出你出错点了,页面后台控制.cs文件中有一个类,Page_Load,这个类就是控制页面加载的时候,需要操作一些什么事情。如果你不在Page_Load对Postback的事件进行处理的话,不管你怎么提交,都只会是绑定全部数据。


怎么办呢?其实很简单啦,在Page_Load中,对页面初始加载的方法进行一个if(!IsPostBack)判断即可,如下代码:

if(!IsPostback)
{
    //页面初始加载的代码
}
else
{
    //页面有操作的代码
}
追问
你说的那段代码,都加有的。正如 wyb0564 说的那样,点下一页的时候页面又刷新了
百度网友022523ba3
推荐于2016-06-01 · TA获得超过678个赞
知道小有建树答主
回答量:416
采纳率:100%
帮助的人:253万
展开全部

用ViewState将查询条件保存起来,每次分页的时候检查ViewState是否为空,如果不为空就把里面的查询条件取出来执行查询,像这样

//比如你已经建立了一个ViewState
ViewState["conditon"] = null;
//如果有查询,就将查询条件保存到ViewState
ViewState["conditon"] = "你的查询条件";
//分页的时候
if(ViewState["condition"] != null)
{
    查询条件 = (强制转换)ViewState["condition"];
}
//调用查询方法时,将查询条件传入
查询方法(查询条件);
更多追问追答
追问
你的方法不大可取
追答

我只能说你对asp.net太不了解了,这个是最简单省事的办法,首先你要明白ViewState是个什么东西,还是给你说个大概流程吧

//首先在load事件中定义一个ViewState
protected void Page_Load(object sender, EventArgs e)
{
      if (IsPostBack) return;
      //在此建立了一个ViewState
      ViewState["condition"] = null;
      //假定你有个专门用于绑定GridView的方法叫Bind()
      Bind(1);
}
//假定你有个专门用于绑定GridView的方法叫Bind()
private void Bind(int pageIndex)
{
    查询条件 = null;
    if(ViewState["condition"] != null)
    {
        查询条件 = (强制转换)ViewState["condition"];
    }
    //调用查询方法时,将查询条件传入
    查询方法(查询条件);//在查询方法中只需要检查查询条件是否为null,如果不为null则在sql中执行查询条件
}
//分页控件事件
protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
{
    Bind(e.NewPageIndex);
}
//查询按钮事件
protected void Button1_Click(object sender, EventArgs e)
{
    //将页面上获取的查询条件,保存到ViewState
    ViewState["condition"] = "你的查询条件";
    //调用绑定GridView的方法
    Bind(1);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wyb0564
2013-12-29 · 超过26用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:27.8万
展开全部
这个问题也困扰我好长时间,其实主要原因是因为你点下一页的时候页面又刷新了,那么数据又重新绑定所造成的.那么当然是你看到的初始页面时的数据了.
我在网上看了一些人的解决办法,但都不是太好,确实很麻烦.
追问
正如你所说 ,点下一页的时候页面又刷新了。
追答

这个问题我也想到方法了,只是比较麻烦,给你个思路:

  1. 先在载入页面设定if(!page.ispostback)

  2. 当你查询到信息以后,在页改变后面邦定的数据源一定要是你查询到的数据源,不要使用开始在载入页面时的数据源.(这里你需要判断绑定的是查询到的哪个数据源,因为你的查询条件很多,所以存在多个数据集,就比较麻烦)

  3. 还有诸如更新删除等也需要这么做.

    我没有使用AJAX技术,你最好使用这个技术试试,我觉得应该可行.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式