EnableViewState="false"的DataGrid分页

用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>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus