我有个gridview,其上部有多个条件框,将条件输入这些框的时候,底下的gridview根据这些条件取出满足条件的值,现在我输入条件后,点击查询,出来第一页的值是我要的,但是翻页到第二页之后就全部显示出来了(即没有条件的情况下的值),翻页后他把整个的页面都刷新了。在返回到第一页也是无条件情况下的值。请各位大侠帮忙解决下。
解决方案 »
- 询问js在火狐浏览器里报错的问题
- 下载时调用讯雷,本地测试可以,布署到IIS后就不行了
- 求一个asp.net做的网络相册,不要求多好,可以实现上传和根据不同上传用户进行展示就可以
- 数据库部署问题
- Oracle里的Select分组统计问题。
- 请教高手:这是什么问题?是关于asp.net的。
- 在datagrid里面,有一行的值是:23.0000,我想去掉小数点后面的4个0000,我该怎么办呢?
- 一个古怪的想重做系统的问题_SqlConnection未将对象引用设置到对象的实例
- 关于gridview中显示的数据表中的代码字段的问题
- 这是怎么一回事情呀??、奇怪了
- 正则高手请进
- 怎样定位动态创建的html网页元素的位置??高手进。。。
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView1.PageIndex = e.NewPageIndex;
this.GridView1.DataSource = 重新绑定;
this.GridView1.DataBind();
}
开始是查出所有数据
输入查询条件后,根据条件去数据库查出满足条件的数据,绑定到GridView上
{
BindData();
}
查询BindData();
public void BindData()
{
//根据条件查询
}
当翻页的时候在把值取出来 查询条件=ViewState["条件"]
是的,gridview的数据源查询数据时,它的输入参数中就应该包括这个“查询条件”,而不能是空的。
比如,你没有讲你的GridView是否在选择条件前绑定了数据源,还是直接通过条件选择来动态绑定数据源。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Bind();
}
}
private void Bind()
{
btnDelete.Attributes.Add("onclick", "javascript:return confirm('你确认要删除吗?')");
string[] s;
DataTable dt = FunClass.PageList(10, "", "*", "hl_merchants", BuildSQL(), 0, " ID ", out s);
grdMerchants.DataSource = dt;
grdMerchants.DataBind(); for (int i = 0; i < s.Length; i++)
{
Label1.Text += s[i];
}
}
protected void grdMerchants_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
grdMerchants.PageIndex = e.NewPageIndex;
Bind1();
} private void Bind1()
{
string[] s;
DataTable dt = FunClass.PageList(10, "", "*", "hl_merchants", BuildSQL(), 1, " ID ", out s);
grdMerchants.DataSource = dt;
grdMerchants.DataBind(); for (int i = 0; i < s.Length; i++)
{
Label1.Text += s[i];
}
} protected void btnSearch_Click(object sender, EventArgs e)
{
Label1.Text = "";
Hf_sql.Value = "";
Bind1();
}
#region 构造查询的SQLText
private string BuildSQL()
{
string sReturn = " 1=1 " + Hf_sql.Value;
if (!tb_LoginName.Text.Equals(""))
{
sReturn += " and login_name like '%" + tb_LoginName.Text + "%'";
}
if (!tb_Mname.Text.Equals(""))
{
sReturn += " and M_name like '%" + tb_Mname.Text + "%'";
}
if (!tb_Mno.Text.Equals(""))
{
sReturn += " and M_no like '%" + tb_Mno.Text + "%'";
} if (!tb_Mlinkman.Text.Equals(""))
{
sReturn += " and m_linkman like '%" + tb_Mlinkman.Text + "%'";
}
if (!ddl_Statu.SelectedValue.Equals(""))
{
sReturn += " and M_statu = '" + ddl_Statu.SelectedValue + "'";
}
Hf_sql.Value = sReturn;
return sReturn;
}
每次翻页都重新绑定了。
this.GridView1.DataSource = 重新绑定;
this.GridView1.DataBind();
点搜索的时候给viewstate赋值
点分页的时候调用viewstate变量当条件,或者点分页的时候也给viewstate赋值……
点分页的时候他每次都进入!ispostback里面!我最郁闷的就是在这里!
{
if (Session["SQL"] == null)
Session["SQL"] = "";
Bind();
}
在查询的时间下加上
protected void btnSearch_Click(object sender, EventArgs e)
{
Session["SQL"] = "";
Bind();
}private string BuildSQL()
{
string sReturn="";
if (Session["SQL"].Equals(""))
sReturn = " 1=1 ";
else
sReturn = Session["SQL"].ToString() ;
.......
Session["SQL"] = sReturn;
return sReturn;
}
这样就可以将其值保存在session中了,而且在查询的时候session的值被清空了。
不过推荐你用viewstate,因为Session是跨页面的。
if(!ispostback)
{
数据绑定的方法();
}
你在写翻页的时候调用你填写条件查询后的方法,最后给控件重新绑定一下就OK了
准备给分
{
if (Session["SQL"] == null)
Session["SQL"] = "";
Bind();
}
在查询的时间下加上
protected void btnSearch_Click(object sender, EventArgs e)
{
Session["SQL"] = "";
Bind();
}private string BuildSQL()
{
string sReturn="";
if (Session["SQL"].Equals(""))
sReturn = " 1=1 ";
else
sReturn = Session["SQL"].ToString() ;
.......
Session["SQL"] = sReturn;
return sReturn;
}
不要用viewstate,因为在你点查询翻页的时候,实际上是已经打开一个新的页面了,你的viewstate已经失效了。所以还是用Session吧,不过注意页面之间的Session要定义不同的值,不然因为 Session过期之前你打开别的页面还是会有Session的值,而产生错误的查询结果。