用DataGrid默认的分页方式有两个小问题
1.要有viewstate,由你表的数据量决定,一般情况下较大 2.用的是PostBack方式,刷新的时候提示是否要重发消息
所以改为取消viewstate在OnItemCreated生成HyperLink 方式,避免了以上两个问题
<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script language="C#" runat="server"> public void ItemCreated(Object sender, DataGridItemEventArgs e) { ListItemType elemType = e.Item.ItemType; if (elemType == ListItemType.Pager) { TableCell pager = (TableCell) e.Item.Controls[0]; for (int i=0; i<pager.Controls.Count; i+=2) { Control o = pager.Controls[i]; if (o is LinkButton) { LinkButton lb = (LinkButton) o; HyperLink hl=new HyperLink(); hl.NavigateUrl=Request.Path + "?page="+lb.CommandArgument; hl.Text="[ "+lb.Text+" ]"; pager.Controls.RemoveAt(i); pager.Controls.AddAt(i,hl); } else { Label l = (Label) o; l.Text = "Page " + l.Text; } } } } protected void Page_Load(Object sender, EventArgs e) { if(!Page.IsPostBack){ int pageIndex=0; try{pageIndex=Int32.Parse(Request["page"])-1;}catch(Exception ex){} Response.Write(MyDataGrid.PageCount); MyDataGrid.CurrentPageIndex=pageIndex; BindData(); } }
void BindData(){ //绑定数据库,略 } </script> <HTML> <body> <form id="Form1" method="post" runat="server"> <asp:datagrid id="MyDataGrid" runat="server" EnableViewState="false" AllowPaging="True" PageSize="10" OnItemCreated="ItemCreated" PagerStyle-BackColor="#FFFFFF" PagerStyle-HorizontalAlign="Right" PagerStyle-Mode="NumericPages"> </asp:datagrid> </form> </body> </HTML> 
|