用DataGrid默认的分页方式有两个小问题
1.要有viewstate,由你表的数据量决定,一般情况下较大
2.用的是PostBack方式,刷新的时候提示是否要重发消息
所以改为取消viewstate在OnItemCreated生成HyperLink 方式,避免了以上两个问题
1@ Import Namespace="System.Data"
1@ Import Namespace="System.Data.SqlClient"
1<script language="C#" runat="server">
2public void ItemCreated(Object sender, DataGridItemEventArgs e) {
3ListItemType elemType = e.Item.ItemType;
4if (elemType == ListItemType.Pager)
5{
6TableCell pager = (TableCell) e.Item.Controls[0];
7for (int i=0; i<pager.Controls.Count; i+=2)
8{
9Control o = pager.Controls[i];
10if (o is LinkButton)
11{
12LinkButton lb = (LinkButton) o;
13HyperLink hl=new HyperLink();
14hl.NavigateUrl=Request.Path + "?page="+lb.CommandArgument;
15hl.Text="[ "+lb.Text+" ]";
16pager.Controls.RemoveAt(i);
17pager.Controls.AddAt(i,hl);
18}
19else
20{
21Label l = (Label) o;
22l.Text = "Page " + l.Text;
23}
24}
25}
26}
27protected void Page_Load(Object sender, EventArgs e)
28{
29if(!Page.IsPostBack){
30int pageIndex=0;
31try{pageIndex=Int32.Parse(Request["page"])-1;}catch(Exception ex){}
32Response.Write(MyDataGrid.PageCount);
33MyDataGrid.CurrentPageIndex=pageIndex;
34BindData();
35}
36}
37
38void BindData(){
39//绑定数据库,略
40}
41</script>
1<html>
2<body>
3<form id="Form1" method="post" runat="server">
4<asp:datagrid allowpaging="True" enableviewstate="false" id="MyDataGrid" onitemcreated="ItemCreated" pagerstyle-backcolor="#FFFFFF" pagerstyle-horizontalalign="Right" pagerstyle-mode="NumericPages" pagesize="10" runat="server">
5</asp:datagrid>
6</form>
7</body>
8</html>