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才是真实的页码
}
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才是真实的页码
}
相关文章推荐
- ASP.NET技巧:GridView控件自定义分页详解第一页
- ASP.NET技巧:GridView控件自定义分页详解第二页
- ASP.NET技巧:GridView控件自定义分页详解第三页
- asp.net web页面自定义分页控件使用详解
- ASP.NET 2.0中Gridview控件高级技巧
- asp.net webform自定义分页控件
- ASP.NET数据绑定GridView控件使用技巧
- GridView控件自定义分页详解
- ASP.net 自定义服务器控件之 GridViewControl
- asp.net分页控件使用详解【附实例下载】
- ASP.NET存储过程自定义分页详解
- Asp.net学习笔记----使用GridView+ObjectDataSource进行自定义分页排序
- Asp.net不拖GridView控件,用Table实现其分页和删除
- Asp.Net自定义分页控件(前台/后台)有图
- 【转】ASP.NET存储过程自定义分页详解
- GridView控件自定义分页详解
- ASP.NET中Gridview控件高级技巧详细分析
- ASP.NET中GridView的自定义分页
- ASP.NET 2.0中Gridview控件技巧(1)
- ASP.NET 2.0中Gridview控件高级技巧