DataGrid自定义分页如何设置,分页原理是什么,当前页<asp:label id="lblcurrent" runat="server" text="1"></asp:label>
<asp:linkButton id="lbtnNext" runat="server" onclick="lbtnNext_Click" text="下一页"></linkButton>
public lbtnsreach_Click()  //单击查询,显示所有查询结果
{
    DataBind();
}
public void DataBind()
{
DataGrid.AllowPaging = true; 
DataGrid.PageSize = 5;
DataGrid.VirtualItemCount=dataset.table[0].rows.count; 
DataGrid.DataSource=dataset;
DataGrid.DataBind();
}
protected void lbtnNext_Click()
{
if(DataGrid.CurrentPageIndex<0 & DataGrid.CurrentPageIndex==DataGrid.PageCount-1)
{
DataGrid.CurrentPageIndex +=1;
DataBind();
}
}问下,自定义分页这样写对不对;错在哪;为什么点了只显示第一页的内容.

解决方案 »

  1.   

      if (this.DataGrid.CurrentPageIndex < (this.DataGrid.PageCount - 1))
                this.dgNewManage.CurrentPageIndex ++;
    在DataGrid1_PageIndexChanged中写
    DataGrid1.CurrentPageIndex = e.NewPageIndex
            DataBlind()
      

  2.   


          <asp:GridView ID="GridView1"  runat="server" AutoGenerateColumns="False" AllowPaging="True" EmptyDataText="没有符合条件记录!" Width="100%"  OnPageIndexChanging="GridView1_PageIndexChanging" >
                  <Columns>
                 
                  </Columns>
                 <PagerTemplate>
                 <div align="center">
                 <table>
                    <tr>
                        <td>
                         第<asp:Label ID="lblPageIndex" runat="server" Text="<%#((GridView)Container.Parent.Parent).PageIndex + 1 %>"></asp:Label>页
                         共<asp:Label ID="lblPageCount" runat="server" Text="<%# ((GridView)Container.Parent.Parent).PageCount %>"></asp:Label>页
                        <asp:LinkButton ID="btnFirst" runat="server" CausesValidation="False" CommandArgument="First"
                            CommandName="Page" Text="首页"></asp:LinkButton>
                        <asp:LinkButton ID="btnPrev" runat="server" CausesValidation="False" CommandArgument="Prev"
                            CommandName="Page" Text="上一页"></asp:LinkButton>
                        <asp:LinkButton ID="btnNext" runat="server" CausesValidation="False" CommandArgument="Next"
                            CommandName="Page" Text="下一页"></asp:LinkButton>
                        <asp:LinkButton ID="btnLast" runat="server" CausesValidation="False" CommandArgument="Last"
                            CommandName="Page" Text="尾页"></asp:LinkButton>
                        <asp:TextBox ID="txtNewPageIndex" runat="server" Text="<%# ((GridView)Container.Parent.Parent).PageIndex + 1%>"
                            Width="20px"></asp:TextBox>
                        <asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-1"
                            CommandName="Page" Text="GO"></asp:LinkButton>
                        </td>
                    </tr>
                </table>
                </div>
                 </PagerTemplate>
              </asp:GridView>
    在PageIndexChanging事件中写翻页代码:  protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView gvw = (GridView)sender;
            if (e.NewPageIndex < 0)
            {
                TextBox pageNum = (TextBox)gvw.BottomPagerRow.FindControl("txtNewPageIndex");
                int Pa = int.Parse(pageNum.Text);
                if (Pa <= 0)
                {
                    gvw.PageIndex = 0;
                }
                else
                {
                    gvw.PageIndex = Pa - 1;
                }
            }
            else
            {
                gvw.PageIndex = e.NewPageIndex;
            }  
             DataBind(); //数据绑定
        }
      

  3.   

    没有这个事件
     protected void DataGrid1_PageIndexChanged(object sender, GridViewPageEventArgs e)
    {
     DataGrid1.PageIndex = e.NewPageIndex;}
    加上这个就可以了
      

  4.   

    写在PageIndexChang事件里跟跟我上面的linkButton下一页有什么区别,
    不是都是指定DataGrid.CurrentPageIndex为下一页吗。写在pageIndexChang事件我也试了,不过还是一样结果,只显示了第一页内容!
      

  5.   

     我用GridView说下, Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
       GridView1.PageIndex = e.NewPageIndex
       '重新绑定GridView上的Data
       BindData()  
     End Sub
      

  6.   

      <div class="btn_op">
                                <table cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td>
                                            &nbsp;<asp:Label ID="lblPageCount" runat="server"></asp:Label>&nbsp;
                                        </td>
                                        <td>
                                            &nbsp;
                                            <asp:Label ID="lblCurrentIndex" runat="server"></asp:Label>&nbsp;
                                        </td>
                                        <td>
                                            &nbsp;
                                            <asp:LinkButton ID="btnFirst" runat="server" CommandArgument="0" ForeColor="navy"
                                                OnClick="PagerButtonClick"></asp:LinkButton>&nbsp;</td>
                                        <td>
                                            &nbsp;
                                            <asp:LinkButton ID="btnPrev" runat="server" CommandArgument="prev" ForeColor="navy"
                                                OnClick="PagerButtonClick"></asp:LinkButton>&nbsp;</td>
                                        <td>
                                            &nbsp;
                                            <asp:LinkButton ID="btnNext" runat="server" CommandArgument="next" ForeColor="navy"
                                                OnClick="PagerButtonClick"></asp:LinkButton>&nbsp;</td>
                                        <td>
                                            &nbsp;
                                            <asp:LinkButton ID="btnLast" runat="server" CommandArgument="last" ForeColor="navy"
                                                OnClick="PagerButtonClick"></asp:LinkButton>&nbsp;</td>
                                                <td><input class="button" onclick="checkAll()" type="button" value="全选" />
                                <asp:dropdownlist id="opera" runat="server">
                                </asp:dropdownlist>
                                <asp:button id="op" runat="server" cssclass="button" onclick="op_Click" text="执行操作" /></td>
                                    </tr>
                                </table>
                                
                            </div>
    Code.cs
            private void ShowStats()
            {
                lblCurrentIndex.Text = "第 " + (DataGrid1.CurrentPageIndex + 1).ToString() + " 页";
                lblPageCount.Text = "总共 " + DataGrid1.PageCount.ToString() + " 页";
                btnFirst.Text = "首页";
                btnPrev.Text = "上一页";
                btnNext.Text = "下一页";
                btnLast.Text = "尾页";
                if (DataGrid1.CurrentPageIndex == 0)
                {
                    btnFirst.Enabled = false;
                    btnPrev.Enabled = false;
                }
                else
                {
                    btnFirst.Enabled = true;
                    btnPrev.Enabled = true;
                }
                if (DataGrid1.CurrentPageIndex == DataGrid1.PageCount - 1)
                {
                    btnLast.Enabled = false;
                    btnNext.Enabled = false;
                }
                else
                {
                    btnLast.Enabled = true;
                    btnNext.Enabled = true;
                }
            }        public void PagerButtonClick(object sender, EventArgs e)
            {
                string arg = ((LinkButton)sender).CommandArgument.ToString();
                switch (arg)
                {
                    case "next":
                        if (DataGrid1.CurrentPageIndex < (DataGrid1.PageCount - 1))
                        {
                            DataGrid1.CurrentPageIndex += 1;
                        }
                        break;
                    case "prev":
                        if (DataGrid1.CurrentPageIndex > 0)
                        {
                            DataGrid1.CurrentPageIndex -= 1;
                        }
                        break;
                    case "last":
                        DataGrid1.CurrentPageIndex = (DataGrid1.PageCount - 1);
                        break;
                    default:
                        DataGrid1.CurrentPageIndex = System.Convert.ToInt32(arg);
                        break;
                }
                newslist();
            }
      

  7.   

    有个事情,我如果没有设置DataGrid.VirtualItemCount的属性,如10条数据,PageSize=5;
    DataGrid自带的分页导航只显示了总页1......
    这个是软件问题还是什么问题
      

  8.   

    我的数据源是一个DataTable;
    DataTable里面的数据是分别从2个DataSet中循环获取的,感觉单击下一页的时候重新绑定数据,.CurrentPageIndex属性没有作用一样.
      

  9.   

    protected void lbtnNext_Click() 

    if(DataGrid.CurrentPageIndex <0 & DataGrid.CurrentPageIndex==DataGrid.PageCount-1) 

    DataGrid.CurrentPageIndex +=1; 
    DataBind(); 

    //if(DataGrid.CurrentPageIndex <0 & DataGrid.CurrentPageIndex==DataGrid.PageCount-1)
    条件有问题吧,你点下一页的时候没有执行第二次绑定,你监视下运行情况
    if(DataGrid.CurrentPageIndex <= DataGrid.PageCount-1) 你分页可以用四个Linkbutton来做
    <asp:linkbutton id=LinkButton1 onclick=PagerButtonClick runat="server" CommandArgument="first">首页</asp:linkbutton>
    <asp:linkbutton id=LinkButton2 onclick=PagerButtonClick runat="server" CommandArgument="pre">上一页</asp:linkbutton>
    <asp:linkbutton id=LinkButton3 onclick=PagerButtonClick runat="server" CommandArgument="next">下一页</asp:linkbutton>
    <asp:linkbutton id=LinkButton4 onclick=PagerButtonClick runat="server" CommandArgument="last">最后一页</asp:linkbutton>public void PagerButtonClick(object sender,EventArgs e)
    { string arg=((LinkButton)sender).CommandArgument;
    switch(arg)
    {
    case "next":
    if (dgFile.CurrentPageIndex<(dgFile.PageCount-1))

    dgFile.CurrentPageIndex+=1;
    LinkButton1.Enabled=true;
    LinkButton2.Enabled=true;
    LinkButton3.Enabled=true;
    LinkButton4.Enabled=true;
    }
    if (dgFile.CurrentPageIndex==(dgFile.PageCount-1))  
    {
    LinkButton3.Enabled=false;
    LinkButton4.Enabled=false; }
    break;
    case "pre":
    if(dgFile.CurrentPageIndex>0)

    dgFile.CurrentPageIndex-=1;
    LinkButton1.Enabled=true;
    LinkButton2.Enabled=true;
    LinkButton3.Enabled=true;
    LinkButton4.Enabled=true;
    }
    if(dgFile.CurrentPageIndex==0)
    {
    LinkButton1.Enabled=false;
    LinkButton2.Enabled=false;
    }
    break;
    case "last":
    {
    dgFile.CurrentPageIndex=dgFile.PageCount-1;
    LinkButton3.Enabled=false;
    LinkButton4.Enabled=false;
    LinkButton1.Enabled=true;
    LinkButton2.Enabled=true;
    break;
    }
    default:
    {
    dgFile.CurrentPageIndex=0;
    LinkButton1.Enabled = false ;
    LinkButton2.Enabled = false ; LinkButton3.Enabled = true ;
    LinkButton4.Enabled = true ;
    break;
    }
    } //GetSource();
    //GetDataSource();
    BindGrid(); //这里调用你的
    //labCount.Text = tb.Rows.Count.ToString();
    //ShowStatus(); }
      

  10.   

    我想了解DataGrid分页是如何访问数据的.希望有人能给出具体的访问机制
      

  11.   

    用分页控件来处理不是更合适吗?aspnetPager
      

  12.   

    protected void lbtnNext_Click() 

    if(DataGrid.CurrentPageIndex <0 & DataGrid.CurrentPageIndex==DataGrid.PageCount-1) 

    DataGrid.CurrentPageIndex +=1; 
    DataBind(); 

    } 这个判断有问题
    protected void lbtnNext_Click() 

    if(DataGrid.CurrentPageIndex >0 && DataGrid.CurrentPageIndex<DataGrid.PageCount) 

    DataGrid.CurrentPageIndex +=1; 
    DataBind(); 

    }
      

  13.   

    你写的分页,把数据库的数据取出放到DataSet中,每次分页都是从DataSet显示当前页的数据
      

  14.   

    当客户端请求翻页时候,ASP.NET将执行由.NET框架委托的同名事件――PageIndexChanged事件,通过这个事件过程达到分页目的。分页机制主要体现在上段的DataGrid1.CurrentPageIndex = e.NewPageIndex语句中。在利用OleDbDataAdapter 对象读取数据后,往DataSet对象中填充数据的就是CurrentPageIndex和PageSize两个属性。OleDbDataAdapter从数据库中按照一定的记录排序方式读出数据后,把从第(CurrentPageIndex*PageSize)条记录开始到第(CurrentPageIndex*PageSize+PageSize)条记录填充到DataSet里,组成一个满页的记录,然后在绑定到DataGrid,然后通过DataGrid控件显示出来,就是请求的页面。本质上就是利用DataAdapter对象Fill方法的几个重载。但是这个过程对于使用这种分页方式的用户来说是透明的,因此我们无需编写任何代码,一切由.NET框架运行库完成。这样的好处是并不需要多少编程技巧,只需指指点点,分页效果就实现了。
      

  15.   

    我发现我DataGrid控件将属性AllowCustomPaging="True"后绑定数据就没办法使用上下页进行操作,将AllowCustomPaging="False"后可以使用自定义分页。
    怪,AllowCustomPaging属性应该用在什么地方
      

  16.   

    AllowCustomPaging 指示是否在数据绑定控件中启用自定义分页。
      

  17.   

    使用 AllowCustomPaging 属性指示是否启用自定义分页。自定义分页是分页的一种可选类型,由 DataGrid 控件专门提供。ASP.NET 2.0 版的数据绑定控件(如 GridView、DetailsView 和 FormView)使用服务器端分页,不支持自定义分页。自定义分页和服务器端分页是互相排斥的。如果将 AllowCustomPaging 设置为 true,请确保 AllowServerPaging 已设置为 false。有关自定义分页的更多信息,请参见 DataGrid.AllowCustomPaging。