我用DataGrid 绑定数据!分页
为了查找方便, 设置一搜索 输入要搜索的关键字后 搜索!DataGrid重新绑定 ,显示搜索的结果!但问题是:如果当前页是第一页,则可得到正确结果! 如果当前页不是第一页,则,就会报错!请教各位这是怎么回事!!有什么好的方法解决!!谢谢!!

解决方案 »

  1.   

    http://singlepine.cnblogs.com/articles/281425.html
      

  2.   

    为什么在当前页是第一页时,就可以搜索?!可得到正确结果! 而当前页不是第一页,搜索就会报错!比如在第二页 按搜索按钮,就报错呢??!?!?出现你这种问题的原因是这样的:当前页在第二页CurrentPageIndex=1,如果你点搜索按钮,如果搜索出的结果就一页PageCount=1,而CurrentPageIndex=1这个值没变,这个显然超出当前的最大页数。所以你在每次搜索后绑定前设置下CurrentPageIndex=0就可以了
      

  3.   

    出错代码最好贴上来估计是超出索引了,你是不是启用了AllowCustomPaging?
      

  4.   

    把DataGrid.CurrentPageIndex = 0加到邦定的代码前面就可以了!
      

  5.   

    在点击查找的时候,注意让页面定位在第一页:
    当你搜索的数据只有1页时,而你原来的页面在2页上,所以会报错!
    DataGrid.CurrentPageIndex = 0
      

  6.   

    在绑定的代码中绑定之前判断一下
    if(DataGrid1.CurrentPageIndex<0 || DataGrid1.CurrentPageIndex>PageCount(总页数))
    {
             DataGrid1.CurrentPageIndex=0;
    }
      

  7.   

    重新绑定前加一段这样的代码就可以了
    //--paging
    int PageSum = 0;
    int RowCount = DataTableRequirement.Rows.Count;
    int PageSize = this.DataGridRequirements.PageSize;if(RowCount % PageSize == 0)
    {
        PageSum = RowCount / PageSize ; //divide exactly
    }
    else
    {
    PageSum = RowCount / PageSize+1; //not divide exactly
    }
    if(RowCount == 0)
    {
    PageSum = 1; //initial paging
    }
    if(this.DataGridRequirements.CurrentPageIndex >= PageSum)   
    {
    this.DataGridRequirements.CurrentPageIndex = PageSum - 1; 
    }
    //--end paging
      

  8.   

    在绑定的代码后加上
    DataGrid.CurrentPageIndex=-1
      

  9.   

    在绑定的代码后加上
    DataGrid.CurrentPageIndex = 0;
    肯定是查询后的页数只有一页,而你当时指定是第二或第三页,当然会出错了,是不是报索引超过啊,这种错误看多了就知道了
      

  10.   

    这种情况我也碰到过,只要在datagrid1.DataBind()之前设置datagrid1.CurrentPageIndex=0就可以了
      

  11.   

    DataGrid.CurrentPageIndex=-1 其实就是这个dd
      

  12.   

    问题是,在DataGird1.Databind之前,pagecount>currentINdex>0,还是会出错
      

  13.   

    哥们,我遇到的问题和你一模一样,其实上面大家的解答有不妥之处。我把代码帖出来
     Private Sub btserch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btserch.Click
            Dim Cprotol As Integer        Select Case dltype.SelectedIndex
                Case 0
                    '基于协议的搜索
                    SqlCommand1.CommandText = "SELECT sid, cid, sig_name, DATEADD(hour, 8, timestamp) AS Expr1,  dbo.INET_NTOA(ip_src) AS Expr2, dbo.INET_NTOA(ip_dst) AS Expr3, dbo.NProtol(ip_proto) AS Expr4, sport, dport FROM Myanalyzer where dbo.Nprotol(ip_proto)='" & dlProtol.SelectedItem.Text & "'"
                    SqlDataAdapter1.SelectCommand = SqlCommand1
                    Try
                        DataSetSerch1.EnforceConstraints = False
                        DataSetSerch1.Clear()
                        SqlDataAdapter1.Fill(DataSetSerch1)
                        DataGrid1.DataBind()
                    Catch ex As Exception
                        Me.Response.Write(ex.Message)
                    End Try
                Case 1
                    '基于时间的搜索
                    SqlCommand1.CommandText = "SELECT sid, cid, sig_name, DATEADD(hour, 8, timestamp) AS Expr1,  dbo.INET_NTOA(ip_src) AS Expr2, dbo.INET_NTOA(ip_dst) AS Expr3, dbo.NProtol(ip_proto) AS Expr4, sport, dport FROM Myanalyzer where DATEADD(hour, 8, timestamp)>'" & tbFrom.Text & "' and DATEADD(hour, 8, timestamp)<'" & tbTo.Text & "'"
                    SqlDataAdapter1.SelectCommand = SqlCommand1
                    Try
                        DataSetSerch1.EnforceConstraints = False
                        DataSetSerch1.Clear()
                        SqlDataAdapter1.Fill(DataSetSerch1)
                        DataGrid1.DataBind()
                    Catch ex As Exception
                        Me.Response.Write(ex.Message)
                    End Try
                Case 2
                    '综合搜索
                    SqlCommand1.CommandText = "SELECT sid, cid, sig_name, DATEADD(hour, 8, timestamp) AS Expr1,  dbo.INET_NTOA(ip_src) AS Expr2, dbo.INET_NTOA(ip_dst) AS Expr3, dbo.NProtol(ip_proto) AS Expr4, sport, dport FROM Myanalyzer where DATEADD(hour, 8, timestamp)>'" & tbFrom.Text & "' and DATEADD(hour, 8, timestamp)<'" & tbTo.Text & "'and dbo.Nprotol(ip_proto)='" & dlProtol.SelectedItem.Text & "'"
                    SqlDataAdapter1.SelectCommand = SqlCommand1
                    Try
                        DataSetSerch1.EnforceConstraints = False
                        DataSetSerch1.Clear()
                        SqlDataAdapter1.Fill(DataSetSerch1)
                        DataGrid1.DataBind()
                    Catch ex As Exception
                        Me.Response.Write(ex.Message)
                    End Try
            End Select
        End Sub
        Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
            '实现分页功能        DataGrid1.CurrentPageIndex = e.NewPageIndex
            btserch_Click(Me, e)
        End Sub
      

  14.   

    成功解决搜索页面的分页问题。之前进行搜索的时候,总是第一页显示是正确的,而其他页则报错Currentindex无效。而不用搜索的时候,在页面load的时候进行了数据集的插入,分页是正确的。问题就出在这里。当页面改变的时候,SqlDataAdapter回到最初定义的状态,如果不用搜索的话,页面重新load的时候数据集插入还是正确的。而如果使用了搜索,因为SqlDataAdapter因为搜索条件的不同而改变。页面改变的时候,SqlDataAdapter回到最初定义的状态而不是你的搜索条件,举例来说,如果你最初的搜索条件搜索出来的纪录只有1页,而当前你需要浏览第一页,那么pagecount=currentindex,显然会报错了。
       解决的方法是,将你的搜索函数写在Currentindex里面,这样你就可以保持你的SqlDataAdapter为搜索状态,从而成功分页了。