ASP.NET 使用AspNetPager进行分页,查询条件丢失问题
这个问题很典型,处理方法也很简单。
先说说你为什么会遇到这个问题:
在页面初始加载的时候,就会对这个GridView进行一次全数据的绑定操作;
当你点击查询的时候,首先,页面会以POSTBACK的方式进行提交数据;
页面控制程序会根据这个页面的数据加载规则进行数据的加载或重新绑定的操作;
到这里,就很容易看出你出错点了,页面后台控制.cs文件中有一个类,Page_Load,这个类就是控制页面加载的时候,需要操作一些什么事情。如果你不在Page_Load对Postback的事件进行处理的话,不管你怎么提交,都只会是绑定全部数据。
怎么办呢?其实很简单啦,在Page_Load中,对页面初始加载的方法进行一个if(!IsPostBack)判断即可,如下代码:
if(!IsPostback)
{
//页面初始加载的代码
}
else
{
//页面有操作的代码
}
你说的那段代码,都加有的。正如 wyb0564 说的那样,点下一页的时候页面又刷新了
用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);
}
我在网上看了一些人的解决办法,但都不是太好,确实很麻烦.
正如你所说 ,点下一页的时候页面又刷新了。
这个问题我也想到方法了,只是比较麻烦,给你个思路:
先在载入页面设定if(!page.ispostback)
当你查询到信息以后,在页改变后面邦定的数据源一定要是你查询到的数据源,不要使用开始在载入页面时的数据源.(这里你需要判断绑定的是查询到的哪个数据源,因为你的查询条件很多,所以存在多个数据集,就比较麻烦)
还有诸如更新删除等也需要这么做.
我没有使用AJAX技术,你最好使用这个技术试试,我觉得应该可行.