我有一个gridview表用来显示所有的数据,对它进行了分页,能够正常实现。但我通过某一个条件进行数据筛选后将符合条件的数据仍旧绑定到这个Gridview中,这时进行上一页或下一页的操作,数据却又会重新绑定所有数据,而不是筛选后的数据。我的具体代码如下,BindData()用来绑定所有数据,BindDataCon()用来绑定筛选后的数据。这时所有数据显示时的分页能够实现,而按条件筛选出后的数据分页不能进行,当进行上一页或下一页的操作时gridview会绑定所有的数据。请问问题在哪里,怎样才能实现两个数据绑定到同一个gridview表,而分别能够实现分页。protected void Page_Load(object sender, EventArgs e)
    {
           BindDataCon(); 
           BindData();
    }    private void BindData()
    {
        SqlConnection cn = new SqlConnection("server=(local);database=test;Trusted_Connection=yes");
        cn.Open();        SqlDataAdapter sda = new SqlDataAdapter("select * from tt", cn);
        DataSet ds = new DataSet();
        sda.Fill(ds);
        this.GridView1.DataSource = ds;
        this.GridView1.DataBind();        cn.Close();
    }    private void BindDataCon()
    {
        SqlConnection cn = new SqlConnection("server=(local);database=test;Trusted_Connection=yes");
        cn.Open();        SqlDataAdapter sda = new SqlDataAdapter("select * from tt where num='" + this.DropDownList1.SelectedItem.Text + "'", cn);
        DataSet ds = new DataSet();
        sda.Fill(ds);
        this.GridView1.DataSource = ds;
        this.GridView1.DataBind();        cn.Close();
    }
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.GridView1.PageIndex = e.NewPageIndex;
        this.GridView1.DataBind();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        BindDataCon();
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        BindData();
    }

解决方案 »

  1.   

      protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
        { 
            this.GridView1.PageIndex = e.NewPageIndex; 
            this.GridView1.DataBind(); 
        } 
    -----------------
    问题在这里,this.GridView1.DataBind(); 
    你每次翻页以后都是重新绑定的没有过滤过的数据,当然会出现这种情况
      

  2.   

    错了,应该是这里
    protected void Page_Load(object sender, EventArgs e) 
        { 
               BindDataCon();  
               BindData(); 
        } 
    你每次postback以后,都重新绑定了两次,而且每次都是最后一次升交,也就是BindDate()的绑定数据有效
    所以会出现上述情况
      

  3.   

    出错原因在Page_Load的时候,因为你加载的时候又绑定了,所以不会出现分页的情况
      

  4.   

    一般我们在做条件过滤时多采用DropDownList1_SelectedIndexChanged事件进行实现,在这个事件中去实现动态绑定方能实现
    不能把绑定的代码放在page-load当中protected void Page_Load(object sender, EventArgs e) 
        { 
               if(!isPostback)
               { 
               BindData(); 
               } 
        } 
      

  5.   

    1. 页面初次加载时绑定要写在 if (!IsPostBack) {} 中;
    2. 分页时需要调用你自定义的 BindDataCon() 而不是 Grid.DataBind()
      

  6.   

    if(!ispostback)
    {
     BindDataCon();   
               BindData(); 
    }protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
        { 
            this.GridView1.PageIndex = e.NewPageIndex; 
            this.GridView1.BindDataCon();
      

  7.   

    我觉得问题出在两个地方:
    (一) protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
        { 
            this.GridView1.PageIndex = e.NewPageIndex; 
            this.GridView1.
        } 
    就算你筛选后还是绑定了DataBind()。
    (二)protected void Page_Load(object sender, EventArgs e) 
        { 
               BindDataCon();  
               BindData(); 
        } 
    我觉得还是用两个GRIDVIEW分别进行绑定。
      

  8.   

      Private Sub ボタン設定_前頁次頁()
            With dgv物件一覧
                imgbtn前頁Top.Enabled = .PageIndex > 0 AndAlso .PageCount > 1
                imgbtn前頁bottom.Enabled = .PageIndex > 0 AndAlso .PageCount > 1
                imgbtn次頁Top.Enabled = .PageIndex < .PageCount - 1
                imgbtn次頁bottom.Enabled = .PageIndex < .PageCount - 1
            End With
        End Sub
      

  9.   

    楼上的已经说了,但是你按钮点击事件没有给出筛选条件,你这是用代码绑定的,在分页事件中应该这样写
     protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)  
        {  
            this.GridView1.PageIndex = e.NewPageIndex;  
            this.Buttom1_Click(null,null)//筛选
        } 
      

  10.   

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                BindData();
        }
      

  11.   

    protected void Page_Load(object sender, EventArgs e) 
        { 
               BindDataCon();  
               BindData(); 
        } 
    我觉得是Page_Load的时候发生错误,先执行BindDataCon();后执行BindData(); ,当然BindDataCon();就没有了,所以只能对所有数据进行分页.
    学习ing.
      

  12.   

    if(!IsPostBack)
    {
        BindDataCon();   
        BindData(); 
    }
    还有那个搜索条件 
    建议放到 session或viewstate里  
    加载的时候 搜索条件 清空了
      

  13.   

    2次绑定放在一个方法里,定义一个viewstate["sqlwhere"],存放条件
    protected   void   Page_Load(object   sender,   EventArgs   e) 
            { 
                 if(!IsPostBack) 
                 {
                     ViewState["sqlwhere"]="";
                     BindData(); 
                 }
            } private   void   BindData() 
            { 
                    string sqlwhere=ViewState["sqlwhere"].ToString();                SqlConnection   cn   =   new   SqlConnection( "server=(local);database=test;Trusted_Connection=yes "); 
                    cn.Open(); 
                    if (sqlwhere=="")
                    {
                         SqlDataAdapter   sda   =   new   SqlDataAdapter( "select   *   from   tt ",   cn); 
                    }
                    else
                    {
                         SqlDataAdapter   sda   =   new   SqlDataAdapter( "select   *   from   tt where " + sqlwhere,   cn); 
                    }
                    DataSet   ds   =   new   DataSet(); 
                    sda.Fill(ds); 
                    this.GridView1.DataSource   =   ds; 
                    this.GridView1.DataBind();                 cn.Close(); 
            } protected   void   Button1_Click(object   sender,   EventArgs   e) 
            { 
                 ViewState["sqlwhere"]="num= "   +   this.DropDownList1.SelectedItem.Text ;  
                 BindData(); 
            } 希望对LZ有帮助
      

  14.   

    1.楼主每次进入页面都进行了两次绑定,浪费。而且你这两个函数就不能用一个解决吗,加个判断而已。
    要不然,你分页的时候,怎么判断调用哪个函数呢,也就说你怎么知道有条件没条件呢。
    2.感觉你的GridView1_PageIndexChanging函数没什么意义。你写的语句本来就是这个控件该做的事。
    按照你的思路的解决方法是:
    (1).把两个绑定函数整合成一个,在pageload里调用。
    (2).在GridView1_PageIndexChanging函数里判断是否有条件,然后决定调用那个。
    另在pageload里
    if(!IsPostBack) 
    {  
            BindData();   
    }
     就可以了
     
    但这样会出现逻辑上的漏洞,即你的翻页看到可能不是你上一次查询的条件,它每次都是都是按照this.DropDownList1.SelectedItem.Text来决定的,建议按楼上的把查询语句或条件放在session或viewstate里