用得着这么费事吗?DataGrid支持自动分页呀,三行代码就搞定了!!

解决方案 »

  1.   

    建议你看看http://www.csdn.net/develop/Read_Article.asp?Id=21997
      

  2.   

    你应该是按照这篇文章写的http://www.csdn.net/develop/Read_Article.asp?Id=21875,我也曾经试过,没有问题!
      

  3.   

    DataGrid1.CurrentPageIndex=e.NewPageIndex
    DtaaGrid1.DataBind()
      

  4.   

    DataGrid的自动分页稍微加点代码,就支持跳转,或是把页码都列出来。
      

  5.   

    不好意思,我没发现你的next错在哪里
    我用vb.net写的,跟你差不多的,没问题的啊
    参考: Sub PagerButtonClick(ByVal sender As Object, ByVal e As EventArgs)
                'used by external paging UI
                Dim arg As String = sender.CommandArgument            Select Case arg
                    '下一页
                Case "next"
                        If (Result_dgd.CurrentPageIndex < (Result_dgd.PageCount - 1)) Then
                            Result_dgd.CurrentPageIndex += 1
                            btnFirst.Enabled = True
                            btnPrev.Enabled = True
                        End If
                        '如果已经达到了最后一页,则"下一页"与"最后一页"失效
                        If (Result_dgd.CurrentPageIndex = Result_dgd.PageCount - 1) Then
                            btnNext.Enabled = False
                            btnLast.Enabled = False
                        End If
                        '前一页
                    Case "prev"
                        If (Result_dgd.CurrentPageIndex > 0) Then
                            Result_dgd.CurrentPageIndex -= 1
                            btnNext.Enabled = True
                            btnLast.Enabled = True
                        End If
                        '如果已经为第一页了,则使"前一页"与"最首页"失效
                        If (Result_dgd.CurrentPageIndex = 0) Then
                            btnFirst.Enabled = False
                            btnPrev.Enabled = False
                        End If
                        '最后一页
                    Case "last"
                        Result_dgd.CurrentPageIndex = (Result_dgd.PageCount - 1)
                        btnLast.Enabled = False
                        btnNext.Enabled = False
                        btnFirst.Enabled = True
                        btnPrev.Enabled = True
                    Case Else
                        'page number
                        Result_dgd.CurrentPageIndex = System.Convert.ToInt32(arg)
                        btnLast.Enabled = True
                        btnNext.Enabled = True
                        btnPrev.Enabled = False
                        btnFirst.Enabled = False
                End Select
                BindGrid()
                ShowStats()
            End Sub
            'result_dgd的ItemDataBind事件,这里用它来截取某一列的字符
            Sub Result_dgd_ItemBind(ByVal sender As Object, ByVal e As DataGridItemEventArgs)            '重量的列,该为3为小数的
                Dim C5 As String()
                C5 = e.Item.Cells(5).Text.Split(".")
                Try
                    e.Item.Cells(5).Text = C5(0) + "." + C5(1).Substring(0, 3)
                Catch
                End Try            Dim C7 As String()
                C7 = e.Item.Cells(7).Text.Split(".")
                Try
                    e.Item.Cells(7).Text = C7(0) + "." + C7(1).Substring(0, 3)
                Catch
                End Try            Dim C9 As String()
                C9 = e.Item.Cells(9).Text.Split(".")
                Try
                    e.Item.Cells(9).Text = C9(0) + "." + C9(1).Substring(0, 3)
                Catch
                End Try
                '支数必须为整数
                Dim C6 As String()
                C6 = e.Item.Cells(6).Text.Split(".")
                e.Item.Cells(6).Text = C6(0)            Dim C8 As String()
                C8 = e.Item.Cells(8).Text.Split(".")
                e.Item.Cells(8).Text = C8(0)            Dim C10 As String()
                C10 = e.Item.Cells(10).Text.Split(".")
                e.Item.Cells(10).Text = C10(0)        End Sub
      

  6.   

    DataGridPaging.aspx<!--StartFragment--><%@ Page Language=vb AutoEventWireup=false Codebehind=DataGridPaging.aspx.vb Inherits=DataGridPaging%>
    <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN>
    <HTML>
      <HEAD>
        <meta content=Visual Basic 7.0 name=CODE_LANGUAGE>
        <meta content=javascript name=vs_defaultClientScript>
        <meta content=http://schemas.microsoft.com/intellisense/ie5 name=vs_targetSchema>
      </HEAD>
      <body MS_POSITIONING=GridLayout>
        <form id=Form1 runat=server>
          <asp:datagrid id=MyDataGrid runat=server AlternatingItemStyle-BackColor=#eeeeee
       HeaderStyle-BackColor=#aaaadd Font-Size=8pt Font-Name=Verdana CellSpacing=0
        CellPadding=3 GridLines=Both BorderWidth=1 BorderColor=black
    OnPageIndexChanged=MyDataGrid_Page PagerStyle-HorizontalAlign=Right
      PagerStyle-Mode=NumericPages PageSize=5 AllowPaging=True>
            <AlternatingItemStyle BackColor=#EEEEEE></AlternatingItemStyle>
            <HeaderStyle BackColor=#AAAADD></HeaderStyle>
            <PagerStyle HorizontalAlign=Right Mode=NumericPages></PagerStyle>
          </asp:datagrid>
          <p style=font-size:9pt>
            <asp:label id=lblPageCount runat=server></asp:label>&nbsp;
            <asp:label id=lblCurrentIndex runat=server></asp:label>
            <asp:linkbutton id=btnFirst onclick=PagerButtonClick runat=server
    Font-Name=verdana Font-size=8pt ForeColor=navy CommandArgument=0>
    </asp:linkbutton>&nbsp;
            <asp:linkbutton id=btnPrev onclick=PagerButtonClick runat=server
    Font-Name=verdana Font-size=8pt ForeColor=navy CommandArgument=prev>
    </asp:linkbutton>&nbsp;
            <asp:linkbutton id=btnNext onclick=PagerButtonClick runat=server
    Font-Name=verdana Font-size=8pt ForeColor=navy CommandArgument=next>
    </asp:linkbutton>&nbsp;
            <asp:linkbutton id=btnLast onclick=PagerButtonClick runat=server
    Font-Name=verdana Font-size=8pt ForeColor=navy CommandArgument=last>
    </asp:linkbutton>
          </p>
        </form>
      </body>
    </HTML>DataGridPaging.aspx.vbImports System.Data.SqlClient
    Imports System.Data
    Imports System.Web.UIPublic Class DataGridPaging
    Inherits System.Web.UI.PageProtected WithEvents MyDataGrid As System.Web.UI.WebControls.DataGrid
    Protected WithEvents btnFirst As System.Web.UI.WebControls.LinkButton
    Protected WithEvents btnPrev As System.Web.UI.WebControls.LinkButton
    Protected WithEvents btnNext As System.Web.UI.WebControls.LinkButton
    Protected WithEvents btnLast As System.Web.UI.WebControls.LinkButton
    Protected WithEvents lblCurrentIndex As System.Web.UI.WebControls.Label
    Protected WithEvents lblPageCount As System.Web.UI.WebControls.Label
    Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid#Region Web Form Designer Generated Code 'This call is required by the Web Form Designer.
    Private Sub InitializeComponent()End SubPrivate Sub Page_Init(ByVal sender As System.Object,_
    ByVal e As System.EventArgs) Handles MyBase.Init
    'CODEGEN: This method call is required by the Web Form Designer
    'Do not modify it using the code editor.
    InitializeComponent()
    End Sub#End RegionPrivate Sub Page_Load(ByVal sender As System.Object,_
    ByVal e As System.EventArgs) Handles MyBase.Load
    btnFirst.Text = 最首页
    btnPrev.Text = 前一页
    btnNext.Text = 下一页
    btnLast.Text = 最后页
    OpenDatabase()
    BindGrid()
    End Sub
    Sub MyDataGrid_Page(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs)
    Dim startIndex As Integer
    startIndex = MyDataGrid.CurrentPageIndex * MyDataGrid.PageSize
    MyDataGrid.CurrentPageIndex = e.NewPageIndex
    BindGrid()
    ShowStats()
    End SubSub BindGrid()
    Dim myConnection As SqlConnection = cn
    Dim ds As DataSet = New DataSet()
    Dim adapter As SqlDataAdapter = New SqlDataAdapter(Select * from Orders, myConnection)
    adapter.Fill(ds, Orders)
    MyDataGrid.DataSource = ds.Tables(Orders).DefaultView
    MyDataGrid.DataBind()
    ShowStats()End SubSub PagerButtonClick(ByVal sender As Object, ByVal e As EventArgs)
    'used by external paging UI
    Dim arg As String = sender.CommandArgumentSelect Case arg
    Case next
    If (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1)) Then
    MyDataGrid.CurrentPageIndex += 1
    End If
    Case prev
    If (MyDataGrid.CurrentPageIndex > 0) Then
    MyDataGrid.CurrentPageIndex -= 1
    End If
    Case last
    MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1)
    Case Else
    'page number
    MyDataGrid.CurrentPageIndex = System.Convert.ToInt32(arg)
    End Select
    BindGrid()
    ShowStats()
    End SubSub ShowStats()
    lblCurrentIndex.Text = 第 + (MyDataGrid.CurrentPageIndex + 1).ToString() + 页
    lblPageCount.Text = 总共 + MyDataGrid.PageCount.ToString() + 页
    End SubPublic cn As New SqlClient.SqlConnection()
    Public Sub OpenDatabase()
    cn.ConnectionString = Server=.;Database=NorthWind;User Id=sa;Password=;
    cn.Open()
    End Sub
    End Class
      

  7.   

    用DataGrid的自动分页功能吧,稍微加点代码,就可以支持直接跳转到某页
      

  8.   

    http://www.csdn.net/develop/Read_Article.asp?Id=21997 
    Math.DivRem 并不包含定义用DataGrid的自动分页功能吧,稍微加点代码,就可以支持直接跳转到某页
    给个例子行么我需要c#的
      

  9.   

    可以看 http://www.430000.net/printpage.asp?ArticleID=61
      

  10.   

    把pageCount = Math.divrem(numResults,pageSize,out a1);
    改成
    a1=numResults % pageSize;
    pageCount=a1;
      

  11.   

    Math.divrem也没有错误!用在.NET Framework 1.1中!
      

  12.   

    把pageCount = Math.divrem(numResults,pageSize,out a1);
    改成
    a1=numResults % pageSize;
    pageCount=numResults / pageSize;
    这个可以了!我试验过了!
      

  13.   

    protected DataSet SeparatePages(DataSet objDataSet,int pintPageNo,int pintRecsPerPage)
    {
    int lngTotalPages=0; //总页数
    int lngStartRecNo=0;  //开始记录号
    int lngEndRecNo=0;   //结束记录号 int[] RecOfTableInfo=new int[4]; //定义一个表信息记录对象
     
      
    System.Data.DataSet objDataSetToReturn=new DataSet(objDataSet.DataSetName); if(pintPageNo<1 || pintRecsPerPage<1)  //如果是非法参数
    {
    return null;
    }
         

    if(objDataSet==null)  //如果查询结果为空值,返回空
    {
    return null;
    } objDataSetToReturn=objDataSet.Clone();   //克隆一个数据集对象,不包括数据 objDataSetToReturn.Tables.Add("TableInfo");   //创建查询结果表的基本信息记录表  
                
    objDataSetToReturn.Tables["TableInfo"].Columns.Add("TotalPages",Type.GetType("System.Int32"));   //增加总页数
    objDataSetToReturn.Tables["TableInfo"].Columns.Add("TotalRecs",Type.GetType("System.Int32"));    //增加总记录数
    objDataSetToReturn.Tables["TableInfo"].Columns.Add("CurPage",Type.GetType("System.Int32"));    //增加当前页号
    objDataSetToReturn.Tables["TableInfo"].Columns.Add("CurRecs",Type.GetType("System.Int32"));    //增加当前页记录数 DataRow objDataRow=objDataSetToReturn.Tables["TableInfo"].NewRow(); 
    lngTotalPages=objDataSet.Tables[objDataSet.DataSetName].Rows.Count/pintRecsPerPage;
    if((objDataSet.Tables[objDataSet.DataSetName].Rows.Count%pintRecsPerPage)>0) //如果没有整除
    {
    lngTotalPages=lngTotalPages+1;
    } RecOfTableInfo[0]=lngTotalPages;
    RecOfTableInfo[1]=objDataSet.Tables[objDataSet.DataSetName].Rows.Count; 
    if(pintPageNo>lngTotalPages)
    {
    pintPageNo=lngTotalPages;
    }
    RecOfTableInfo[2]=pintPageNo;
    if(pintPageNo==lngTotalPages)  //如果等于最后页设置当前页面记录数
    {
    if((objDataSet.Tables[objDataSet.DataSetName].Rows.Count%pintRecsPerPage)>0) //如果没有整除
    {
    RecOfTableInfo[3]=objDataSet.Tables[objDataSet.DataSetName].Rows.Count%pintRecsPerPage;
    }
    else
    {
    RecOfTableInfo[3]=pintRecsPerPage; }
    }
    else
    {
    RecOfTableInfo[3]=pintRecsPerPage; }
    lngStartRecNo=(pintPageNo-1)*pintRecsPerPage;  //开始记录号
    lngEndRecNo=lngStartRecNo+RecOfTableInfo[3]-1;   //结束记录号 objDataRow.ItemArray=new object[]{RecOfTableInfo[0],RecOfTableInfo[1],RecOfTableInfo[2],RecOfTableInfo[3]};  
    objDataSetToReturn.Tables["TableInfo"].Rows.Add(objDataRow);   //记录查询结果的相应数据 for(int i=lngStartRecNo;i<=lngEndRecNo;i++)
    {
    try
    {
    objDataSetToReturn.Tables[objDataSet.DataSetName].Rows.Add(objDataSet.Tables[objDataSet.DataSetName].Rows[i].ItemArray);   
    }
    catch(Exception e)
    {
    return null;
    }
    }
    return objDataSetToReturn; } }
      

  14.   

    这个简单,你写个textbox,把它的值作为参数传给page=页数