您的位置:首页 > 编程语言 > ASP

ASP.NET技巧:GridView控件自定义分页详解

2012-12-30 12:00 706 查看
在这里我们将用一个隐藏字段来保存这个PageIndex,即当前页码.当点击上一页时,将它的值减一,知道为0,要注意的一点这里的第一页页码是0而不是1.下面看看代码,然后我们再分析分析!

1<asp:GridView ID="NewsGrid" runat="server"
AllowPaging="false"
Width="100%">

2

<Columns>

3

<asp:BoundField
DataField="NewsId" HeaderText="新闻ID"/>

4

<asp:HyperLinkField DataNavigateUrlFields="NewsId"
DataNavigateUrlFormatString="~/Details.aspx?ID={0}"

5

DataTextField="Title"
HeaderText="新闻标题"
ItemStyle-Width="70%"/>

6

<asp:BoundField
DataField="PostTime"
HeaderText="发布时间"/>

7

<asp:CommandField HeaderText="新闻管理"
ShowCancelButton="False" ShowDeleteButton="True"

8

ShowEditButton="True"/>

9

</Columns>

10
</asp:GridView>

11 <div style="
height:16px; padding-top:5px; margin-right:30px;
float:right">

12
<asp:HiddenField ID="CurrentPage" runat="server"
Value="0"/>

13
<asp:LinkButton ID="First" runat="server"
CommandArgument="first"
onclick="PagerButton_Click">首
页</asp:LinkButton>

14
<asp:LinkButton ID="Prev" runat="server"
CommandArgument="prev"
onclick="PagerButton_Click">上一页</asp:LinkButton>

15
<asp:LinkButton ID="Next" runat="server"
CommandArgument="next"
onclick="PagerButton_Click">下一页</asp:LinkButton>

16
<asp:LinkButton ID="Last" runat="server"
CommandArgument="last"
onclick="PagerButton_Click">尾
页</asp:LinkButton>

17
</div> CS文件中的代码:

1 protected void
PagerButton_Click(object sender, EventArgs e)

2 {

3

int pageIndx =
Convert.ToInt32(CurrentPage.Value);

4

int totals =
NewsManager.GetNews(0, pageSize).TotalRecords;

5

int pages = (totals %
pageSize) == 0 ? (totals / pageSize) : (totals / pageSize +
1);

6

string arg =
((LinkButton)sender).CommandArgument.ToString().ToLower();

7

switch (arg)

8

{

9

case "prev":

10

if (pageIndx >
0)

11

{

12

pageIndx -= 1;

13

}

14

break;

15

case "next":

16

if (pageIndx <
pages - 1)

17

{

18

pageIndx += 1;

19

}

20

break;

21

case "last":

22

pageIndx = pages - 1;

23

break;

24

default:

25

pageIndx = 0;

26

break;

27

}

28

CurrentPage.Value =
pageIndx.ToString();

29

NewsGrid.DataSource =
NewsManager.GetNews(pageIndx , pageSize).Entities;

30

NewsGrid.DataBind();

31 }

用下拉列表控制gridview的分页

思路很简单,如果将
装载下拉列表的循环放到load事件中,那么是肯定读不出gridview总页码的!

先考虑页面以及控件的执行顺序我们就能发现,load事件是发生最前面,其次读取数据库,然后绑定给GridView,在绑定的过程中又有先按照控件分页的相关限制得到页码!!

所以,我们可以知道,分页肯定应该是在GridView的数据被绑定之后才发生!!

说到这里我想应该是知道了,这个装载下拉列表的事件肯定是应该发生在GridView1_DataBound事件中的了!

代码没什么技术含量,很简单!!如下:

把 if (!IsPostBack) 这一句换成

DropDownList1.DropDownList1.Items.Clear();

也可以!

protected void GridView1_DataBound(object sender, EventArgs
e)

{

if (!IsPostBack)

{//判断页是否第一次载入,如果你想知道为什么,恰恰我又不想解释,那你去掉这个试下即可

for (int i = 1; i
<= GridView1.PageCount; i++)

{//从1开始循环到页的最大数量

DropDownList1.Items.Add(i.ToString());//填充到下拉列表

}

}

}

protected void DropDownList1_SelectedIndexChanged(object sender,
EventArgs e)

{

GridView1.PageIndex =
Convert.ToInt32(DropDownList1.SelectedValue)-1;

//因为页码其实是从0开始的,而我们为了看起来直观,所以从1开始,这样来说我们就必须减1才是真实的页码

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: