我有个gridview,其上部有多个条件框,将条件输入这些框的时候,底下的gridview根据这些条件取出满足条件的值,现在我输入条件后,点击查询,出来第一页的值是我要的,但是翻页到第二页之后就全部显示出来了(即没有条件的情况下的值),翻页后他把整个的页面都刷新了。在返回到第一页也是无条件情况下的值。请各位大侠帮忙解决下。

解决方案 »

  1.   


    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.GridView1.PageIndex = e.NewPageIndex;
        this.GridView1.DataSource = 重新绑定;
        this.GridView1.DataBind();
    }
      

  2.   

    在分页绑定的时候做判断,看是否调用的是你查询的方法?另外检查你的SQL语句,给具体数据,看查出来的值是否是你第二页,以及后面的值,我以前出现过你这种情况,就是因为SQL语句的条件满足了一个,里面的子查询没有加条件,分页后就是全部数据 !
      

  3.   

    按条件查询
    开始是查出所有数据
    输入查询条件后,根据条件去数据库查出满足条件的数据,绑定到GridView上
      

  4.   

    if(!IsPostBack)
    {
    BindData();
    }
    查询BindData();
    public void BindData()
    {
    //根据条件查询
    }
      

  5.   

    单击查询的时候吧条件赋值给     ViewState["条件"] = "查询条件"
    当翻页的时候在把值取出来        查询条件=ViewState["条件"]
      

  6.   


    是的,gridview的数据源查询数据时,它的输入参数中就应该包括这个“查询条件”,而不能是空的。
      

  7.   

    这就是http协议本身没有状态的原因了吧?
      

  8.   

    设pagesize为5,然后databind绑定一下就可以了
      

  9.   

     你点分页的时候要把条件也附加进去啊··要不然只有点搜索的时候才会根据条件查询··点分页的时候自然就查询全部了……方法如前面几楼说的·把条件值赋给视图状态字段 viewstate 根据viewstate查询绑定……
      

  10.   

    得先定义viewstate为空啊?刷新的时候viewstate不就还是空了吗?
      

  11.   

    学了ASP.NET不知道viewstate是什么??????
      

  12.   

    汗啊!一直都是用session[""]的。没用过viewstate
      

  13.   

    session和viewstate的级别不一样的饿哦。session可以全局使用,而viewstate是页面级的。
      

  14.   

    我想你做好将前后台代码贴出来。因为根据你的文字描叙,有很多种可能.
    比如,你没有讲你的GridView是否在选择条件前绑定了数据源,还是直接通过条件选择来动态绑定数据源。
      

  15.   

    一般来讲,你每次选择条件,点击查询后,对gridview都需要重新绑定数据
      

  16.   

    其实也可直接给gridview定义一个Sqldatasource,选择条件后,点击查询,更新sqldatasource,在绑定到Gridview
      

  17.   

    只需要在pagechaning事件中,重新给gridview绑定一下数据就ok了,
      

  18.   

    在你第一次绑定后你的gridview里绑定的当然是你无条件时候的查询,你输入条件后,你应该重新绑定控件。
      

  19.   

    在gridview翻页的时候,整个页面都被重新刷新了!同样就执行了if (!IsPostBack)里面的代码了。所以很纠结!
      

  20.   

     我是按照http://topic.csdn.net/u/20100813/10/92769ae4-2704-48a8-9af9-3a91cf4ae301.html的思路做的,.cs页面的代码如下:
    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;
        }
    每次翻页都重新绑定了。
      

  21.   

    查询条件保存到session,就可以了。或者用ajax 局部刷新
      

  22.   

    我也知道用ajax 局部刷新,我不想用那个!有没有其他的办法啊?
      

  23.   

    viewstate 保存查询条件,页面级的,不会丢失!
      

  24.   

    this.GridView1.PageIndex = e.NewPageIndex;
        this.GridView1.DataSource = 重新绑定;
        this.GridView1.DataBind();
      

  25.   

    我代码已经重新绑定了哦!点查询按钮的时候是正确的,但是翻页之后,执行的是isPostBack了,又是重新绑定了!
      

  26.   

    viewstate一开始你得定义吧,你只要在定义的时候,下次翻页的话这个viewstate就会回到被定义的时候赋给的值,除非在别的页面定义转向这个页面。
      

  27.   

    viewstate你声明在!ispostback里面
    点搜索的时候给viewstate赋值
    点分页的时候调用viewstate变量当条件,或者点分页的时候也给viewstate赋值……
      

  28.   

    页索引什么的也放在viewstate里面~
      

  29.   

    分页的时候需要重新绑定...还有就是你的检索条件最好用viewstate进行保存就不会出现你说的在返回到第一页也是无条件情况下的值这种情况了
      

  30.   


    点分页的时候他每次都进入!ispostback里面!我最郁闷的就是在这里!
      

  31.   

    在if (!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是跨页面的。
      

  32.   

    你查询按钮的方法绑定不对么、当你单击下一页的时候你的gridView是默认绑定的方法而不是你的查询按钮调用的那个方法、你要在后台手动绑定、让单击下一页的时候代码也绑定为查询按钮的有条件的查询方法就好了
      

  33.   

    你需要在load时间里面写上判断
    if(!ispostback)
    {
       数据绑定的方法();
    }
    你在写翻页的时候调用你填写条件查询后的方法,最后给控件重新绑定一下就OK了
    准备给分
      

  34.   

    在if (!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;
      }
    不要用viewstate,因为在你点查询翻页的时候,实际上是已经打开一个新的页面了,你的viewstate已经失效了。所以还是用Session吧,不过注意页面之间的Session要定义不同的值,不然因为 Session过期之前你打开别的页面还是会有Session的值,而产生错误的查询结果。