DataGrid自动分页设置AllowPaging=True,PageStyle.Mode=NumericPages,PageButtonCount=10。查询绑定后显示:
1 2 3 4 5 6 7 8 9 10 ...
点击"...",会触发PageIndexChanged事件,此时显示第11页内容。分页栏显示:
11 12 13 14 15 16 17 18 19 20 ...
此时点击右边的"..."没有触发PageIndexChanged事件,而且,点击12页又回到第1页,此时在PageIndexChanged事件中检查e.NewPageIndex=1,并没有=11.

解决方案 »

  1.   

    有PageCount属性,没有PageButtonCount.
      

  2.   

    我按照这个设置做了一个测试,没有发现你说的问题, 一切都很正常。<%@ Page language="c#" Codebehind="WebForm7.aspx.cs" AutoEventWireup="false" Inherits="MyPlayground.WebForm7" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm7</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body>
    <form id="Form1" method="post" runat="server">
    <asp:DataGrid id="dg1" runat="server" AutoGenerateColumns="True" AllowPaging="True" DataSource='<%# GetData() %>' PageSize="1">
    <PagerStyle Mode="NumericPages"></PagerStyle>
    </asp:DataGrid>
    </form>
    </body>
    </HTML>
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace MyPlayground
    {
    /// <summary>
    /// WebForm7 的摘要说明。
    /// </summary>
    public class WebForm7 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid dg1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    if (!IsPostBack)
    this.DataBind();
    } public string[] GetData()
    {
    string[] arr = new string[30];
    for (int i = 0; i < arr.Length; i++)
    arr[i] = i.ToString();
    return arr;
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.dg1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dg1_PageIndexChanged);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void dg1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    dg1.CurrentPageIndex = e.NewPageIndex;
    dg1.DataBind();
    }
    }
    }
      

  3.   

    你的分页事件是怎么写的,参考:
    <%@ Page Language="C#" AutoEventWireup="True" %>
    <%@ Import Namespace="System.Data" %>
     
    <html>
       <script language="C#" runat="server">
     
          ICollection CreateDataSource() 
          {
             DataTable dt = new DataTable();
             DataRow dr;
     
             dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
             dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
             dt.Columns.Add(new DataColumn("DateTimeValue", typeof(string)));
             dt.Columns.Add(new DataColumn("BoolValue", typeof(bool)));
     
             for (int i = 0; i < 100; i++) 
             {
                dr = dt.NewRow();
       
                dr[0] = i;
                dr[1] = "Item " + i.ToString();
                dr[2] = DateTime.Now.ToShortDateString();
                dr[3] = (i % 2 != 0) ? true : false;
     
                dt.Rows.Add(dr);
             }
     
             DataView dv = new DataView(dt);
             return dv;
          }
     
          void Page_Load(Object sender, EventArgs e) 
          { 
             BindGrid();
          }
     
          void MyDataGrid_Page(Object sender, DataGridPageChangedEventArgs e) 
          {
             MyDataGrid.CurrentPageIndex = e.NewPageIndex;
             BindGrid();
          }
     
          void BindGrid() 
          {
             MyDataGrid.DataSource = CreateDataSource();
             MyDataGrid.DataBind();
             ShowStats();
          }
     
          void ShowStats() 
          {
             lblEnabled.Text = "AllowPaging is " + MyDataGrid.AllowPaging;
             lblCurrentIndex.Text = "CurrentPageIndex is " + MyDataGrid.CurrentPageIndex;
             lblPageCount.Text = "PageCount is " + MyDataGrid.PageCount;
             lblPageSize.Text = "PageSize is " + MyDataGrid.PageSize;
          }
     
     
       </script>
     
    <body>
     
       <h3>Paging with DataGrid</h3>
     
       <form runat=server>
     
          <asp:DataGrid id="MyDataGrid" runat="server"
               AllowPaging="True"
               PageSize="10"
               PagerStyle-Mode="NumericPages"
               PagerStyle-PageButtonCount="5"
               PagerStyle-HorizontalAlign="Right"
               OnPageIndexChanged="MyDataGrid_Page"
               BorderColor="black"
               BorderWidth="1"
               GridLines="Both"
               CellPadding="3"
               CellSpacing="0"
               Font-Name="Verdana"
               Font-Size="8pt"
               HeaderStyle-BackColor="#aaaadd"
               AlternatingItemStyle-BackColor="#eeeeee"/>      <p>
     
          <table bgcolor="#eeeeee" cellpadding="6">
             <tr>
                <td nowrap>
                   
     
                      <asp:Label id="lblEnabled" 
                           runat="server"/><br>
                      <asp:Label id="lblCurrentIndex" 
                           runat="server"/><br>
                      <asp:Label id="lblPageCount" 
                           runat="server"/><br>
                      <asp:Label id="lblPageSize" 
                           runat="server"/><br>
     
                   
                </td>
             </tr>
          </table>
     
       </form>
     
    </body>
    </html>
      

  4.   

    分页事件如此写法
        Private Sub dgdWorkFlowRecord_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles dgdWorkFlowRecord.PageIndexChanged
            dgdWorkFlowRecord.CurrentPageIndex = e.NewPageIndex
            dgdWorkFlowRecord.DataBind()
        End Sub
      

  5.   

    <asp:datagrid id="dgdWorkFlowRecord" runat="server" Width="100%" EnableViewState="False" DataKeyField="WorkFlowID"
                                            AutoGenerateColumns="False" BorderColor="Silver" BorderStyle="None" CellSpacing="1" BorderWidth="1px"
                                            BackColor="White" CellPadding="2" GridLines="None" AllowPaging="True" AllowSorting="True"
                                            PageSize="20">
                                            <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle>
                                            <EditItemStyle Wrap="False"></EditItemStyle>
                                            <AlternatingItemStyle Wrap="False" Height="7px" BackColor="White"></AlternatingItemStyle>
                                            <ItemStyle Wrap="False" Height="7px" ForeColor="Black" BackColor="#DEDFDE"></ItemStyle>
                                            <HeaderStyle Font-Bold="True" Wrap="False" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle>
                                            <FooterStyle Wrap="False" ForeColor="Black" BackColor="#C6C3C6"></FooterStyle>
                                            <Columns>
                                                <asp:HyperLinkColumn DataNavigateUrlField="WorkFlowID" DataNavigateUrlFormatString="workflowview.aspx?WorkFlowID={0}"
                                                    DataTextField="WorkFlowID" SortExpression="WorkFlowID" HeaderText="工单ID">
                                                    <HeaderStyle Wrap="False"></HeaderStyle>
                                                    <ItemStyle Wrap="False"></ItemStyle>
                                                </asp:HyperLinkColumn>
                                                <asp:BoundColumn DataField="ServiceRecordID" SortExpression="ServiceRecordID" ReadOnly="True" HeaderText="客服单ID">
                                                    <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                                                    <ItemStyle Wrap="False"></ItemStyle>
                                                </asp:BoundColumn>
                                                <asp:BoundColumn DataField="EnteredDate" SortExpression="EnteredDate" HeaderText="派单日期">
                                                    <HeaderStyle Wrap="False" Width="120px"></HeaderStyle>
                                                    <ItemStyle Wrap="False"></ItemStyle>
                                                </asp:BoundColumn>
                                                <asp:BoundColumn DataField="EnteredByName" SortExpression="EnteredByName" ReadOnly="True" HeaderText="派单人">
                                                    <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                                                    <ItemStyle Wrap="False"></ItemStyle>
                                                </asp:BoundColumn>
                                                <asp:BoundColumn DataField="TermDay" SortExpression="TermDay" ReadOnly="True" HeaderText="时限">
                                                    <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                                                    <ItemStyle Wrap="False"></ItemStyle>
                                                </asp:BoundColumn>
                                                <asp:BoundColumn DataField="StatusName" SortExpression="StatusID" ReadOnly="True" HeaderText="状态">
                                                    <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                                                    <ItemStyle Wrap="False"></ItemStyle>
                                                </asp:BoundColumn>
                                                <asp:BoundColumn DataField="LiabilityName" SortExpression="LiabilityID" ReadOnly="True" HeaderText="责任类型">
                                                    <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                                                    <ItemStyle Wrap="False"></ItemStyle>
                                                </asp:BoundColumn>
                                            </Columns>
                                            <PagerStyle NextPageText="下一页&amp;gt;" PrevPageText="&amp;lt;上一页" HorizontalAlign="Right" ForeColor="Black"
                                                BackColor="#C6C3C6" Wrap="False" Mode="NumericPages"></PagerStyle>
                                        </asp:datagrid>
      

  6.   

    datagrid为表格的名字
    DataTable dt;
    datagrid.CurrentPageIndex = e.NewPageIndex;
    datagrid.DataSource = dt; //重新绑定一次
    datagrid.DataBind();
      

  7.   

    原来与这个属性有关EnableViewState="False",把这项去掉就可以了。一个碰巧的机会,试了一下,发现就可以了。请问各位大侠,是不是与这个有关系?
      

  8.   

    ViewState 里存储了当前页面的一些状态信息,是 Base64 编码过的,包括 你这个 DataGrid 的分页信息。 在每次 postback 的时候服务器端再解码,恢复到控件的属性上, 以便再次发送给客户端。http://dev.csdn.net/article/46/46866.shtm