asp.net 常见操作----分页(1)
来源:互联网 发布:东史郎日记 知乎 编辑:程序博客网 时间:2024/05/29 10:12
朋友做的一个网站用aspnetpager控件进行分页放到虚拟空间出现问题,看来用分页控件是不行了,但他近期忙于在公司实习,于是让我帮他写个自定义分页。
经过上网查阅相关资料结合自己之前的知识积累,顺利实现了GridView和Repeater自定义分页功能,GridView分页截图如下:
贴上主要实现代码:
1、GridView自定义分页前台核心代码:
GridView.aspx
...
view source
print?
<PagerTemplate>
<br />
<asp:Label ID="lblPage" runat="server" Text='<%# "共" + ((GridView)Container.NamingContainer).PageCount + "页,当前第" + (((GridView)Container.NamingContainer).PageIndex + 1) + "页" %>'></asp:Label>
<asp:LinkButton ID="lbtnFirst" runat="server" Text="首页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'
CommandName="Page" CommandArgument="First"></asp:LinkButton>
<asp:LinkButton ID="lbtnPrev" runat="server" Text="上一页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'
CommandName="Page" CommandArgument="Prev"></asp:LinkButton>
<asp:PlaceHolder ID="numeric" runat="server"></asp:PlaceHolder>
<asp:LinkButton ID="lbtnNext" runat="server" Text="下一页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != (((GridView)Container.NamingContainer).PageCount - 1) %>'
CommandName="Page" CommandArgument="Next"></asp:LinkButton>
<asp:LinkButton ID="lbtnLast" runat="server" Text="尾页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != (((GridView)Container.NamingContainer).PageCount - 1) %>'
CommandName="Page" CommandArgument="Last"></asp:LinkButton>
<asp:DropDownList ID="ddlJumpPage" runat="server">
</asp:DropDownList>
<asp:ImageButton ID="btnGo" runat="server" Width="30px" Height="20px" ImageAlign="Bottom" ImageUrl="~/images/go.jpg" CommandName="Go" />
</PagerTemplate>
2、GridView自定义分页后台核心代码:
GridView.aspx.cs
view source
print?
//根据命令来变更当前页码
protected void gvTest_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Page")
{
switch (e.CommandArgument.ToString())
{
case "First":
gvTest.PageIndex = 0;
break;
case "Prev":
if (gvTest.PageIndex > 0)
{
gvTest.PageIndex -= 1;
}
break;
case "Next":
if (gvTest.PageIndex < (gvTest.PageCount - 1))
{
gvTest.PageIndex += 1;
}
break;
case "Last":
gvTest.PageIndex = gvTest.PageCount - 1;
break;
default:
gvTest.PageIndex = Int32.Parse(e.CommandArgument.ToString()) - 1;
break;
}
}
else
{
if (e.CommandName == "Go")
{
DropDownList ddlJumpPage = (DropDownList)gvTest.BottomPagerRow.FindControl("ddlJumpPage");
int index = Int32.Parse(ddlJumpPage.SelectedValue);
gvTest.PageIndex = index - 1;
GetData();
}
}
}
//显示页码导航
protected void gvTest_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Pager)
{
PlaceHolder ph = (PlaceHolder)e.Row.FindControl("numeric");
int startIndex = (gvTest.PageIndex) / 10 * 10 + 1;//根据当前页得到第一个页码
int endIndex = startIndex + 9;//显示10个页码
if (endIndex > gvTest.PageCount)//判断是否为最后一页
{
endIndex = gvTest.PageCount;
}
for (int i = startIndex; i <= endIndex; i++)//通过循环动态显示页码
{
var lbtn = new LinkButton { CommandName = "Page", CommandArgument = i.ToString(), Text = "[" + i + "]" };
ph.Controls.Add(i - 1 != gvTest.PageIndex ? (Control)lbtn : new LiteralControl(i.ToString()));
ph.Controls.Add(new LiteralControl(" "));
}
}
}
3、Repeater自定义分页前台核心代码
Repeater.aspx
...
view source
print?
<asp:Repeater ID="rpTest" runat="server" OnItemDataBound="rpTest_ItemDataBound" OnItemCreated="rpTest_ItemCreated">
...
<FooterTemplate>
<tr>
<td colspan="6">
<br />
共<asp:Label ID="lblPageCount" runat="server" Text=""></asp:Label>页,当前第<asp:Label
ID="lblCurrentPage" runat="server" Text=""></asp:Label>页
<asp:HyperLink ID="hlFirst" runat="server" Text="首页"></asp:HyperLink>
<asp:HyperLink ID="hlPrev" runat="server" Text="上一页"></asp:HyperLink>
<asp:PlaceHolder ID="numeric" runat="server"></asp:PlaceHolder>
<asp:HyperLink ID="hlNext" runat="server" Text="下一页"></asp:HyperLink>
<asp:HyperLink ID="hlLast" runat="server" Text="尾页"></asp:HyperLink>
<asp:DropDownList ID="ddlJumpPage" runat="server">
</asp:DropDownList>
<asp:ImageButton ID="ibtnGo" runat="server" Width="30px" Height="20px" ImageAlign="Bottom"
ImageUrl="~/images/go.jpg" OnClick="ibtnGo_Click" />
</td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
<asp:Label ID="lblMessage" runat="server"></asp:Label>
4、Repeater自定义分页后台核心代码
Repeater.aspx.cs
view source
print?
//返回待绑定的数据源
private PagedDataSource GetPds()
{
StudentInfo stuInfo = new StudentInfo();
DataSet ds = stuInfo.GetStudent();
PagedDataSource pds = new PagedDataSource();
pds.DataSource = ds.Tables[0].DefaultView;//设置数据源
pds.AllowPaging = true;//允许分页
pds.PageSize = 10;//一页显示10条信息
if (Request.QueryString["page"] != null)//判断页面传值是否为空
{
pds.CurrentPageIndex = Int32.Parse(Request.QueryString["page"].ToString()) - 1;
}
else
{
pds.CurrentPageIndex = 0;
}
return pds;
}
//显示底部分页按钮并向下拉列表控件中填充数据
protected void rpTest_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (GetPds().DataSourceCount != 0)
{
if (e.Item.ItemType == ListItemType.Footer)//判断是否为页脚
{
Label lblRecordCount = (Label)e.Item.FindControl("lblRecordCount");
Label lblPageCount = (Label)e.Item.FindControl("lblPageCount");
Label lblCurrentPage = (Label)e.Item.FindControl("lblCurrentPage");
HyperLink hlFirst = (HyperLink)e.Item.FindControl("hlFirst");
HyperLink hlPrev = (HyperLink)e.Item.FindControl("hlPrev");
HyperLink hlNext = (HyperLink)e.Item.FindControl("hlNext");
HyperLink hlLast = (HyperLink)e.Item.FindControl("hlLast");
DropDownList ddlJumpPage = (DropDownList)e.Item.FindControl("ddlJumpPage");
int pageCount = GetPds().PageCount;
int curPage = GetPds().CurrentPageIndex + 1;
for (int i = 1; i <= pageCount; i++)
{
ddlJumpPage.Items.Add(i.ToString());
}
if (pageCount == 1)//若总页数只有一页,则底部分页链接不可用
{
hlFirst.Enabled = false;
hlPrev.Enabled = false;
hlNext.Enabled = false;
hlLast.Enabled = false;
}
else
{
if (curPage <= 1)//若当前为首页,则首页和上一页的链接不可用
{
hlFirst.Enabled = false;
hlPrev.Enabled = false;
hlNext.Enabled = true;
hlLast.Enabled = true;
}
else
{
hlPrev.NavigateUrl = "?page=" + (curPage - 1);
}
if (curPage >= pageCount)//若当前页为最后一页,则下一页和尾页的链接不可用
{
hlFirst.Enabled = true;
hlPrev.Enabled = true;
hlNext.Enabled = false;
hlLast.Enabled = false;
}
else
{
hlNext.NavigateUrl = "?page=" + (curPage + 1);
}
hlFirst.NavigateUrl = "?page=1";
hlLast.NavigateUrl = "?page=" + pageCount;
}
lblPageCount.Text = pageCount.ToString();
lblCurrentPage.Text = curPage.ToString();
}
}
else//若数据源中无信息,则显示相关提示
{
rpTest.Visible = false;
lblMessage.Text = "无相关记录";
}
}
//显示页码导航
protected void rpTest_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (GetPds().DataSourceCount != 0)
{
if (e.Item.ItemType == ListItemType.Footer)
{
PlaceHolder ph = (PlaceHolder)e.Item.FindControl("numeric");
int pageCount = GetPds().PageCount;
int curPage = GetPds().CurrentPageIndex + 1;
int startIndex = (curPage - 1) / 10 * 10 + 1;//根据当前页得到第一个页码
int endIndex = startIndex + 9;//显示10个页码
if (endIndex > pageCount)//判断是否为最后一页
{
endIndex = pageCount;
}
for (int i = startIndex; i <= endIndex; i++)//通过循环动态显示页码
{
var hl = new HyperLink { ID = "hl" + i, Text = "[" + i + "]", NavigateUrl = "?page=" + i };
ph.Controls.Add(i != curPage ? (Control)hl : new LiteralControl(i.ToString()));
ph.Controls.Add(new LiteralControl(" "));
}
}
}
}
- asp.net 常见操作----分页(1)
- asp.net分页(一)
- gridView (分页)(asp.net)
- asp.net 操作带输入输出参数的分页存储过程(—)
- asp.net 操作带输入输出参数的分页存储过程(二)
- asp.net 操作带输入输出参数的分页存储过程(三)
- asp.net 操作带输入输出参数的分页存储过程(四)
- asp.net 操作带输入输出参数的分页存储过程(四)
- asp.net 操作带输入输出参数的分页存储过程(三)
- asp.net 操作带输入输出参数的分页存储过程(二)
- asp.net 操作带输入输出参数的分页存储过程(—)
- ASP.NET下数据展示与分页操作总结
- AJAX 分页 asp.net分页
- ASP.NET GridView自动更新操作的常见错误
- [ASP.NET] C#字符串常见的转换操作
- Asp.Net DataTable 简单分页(新)
- ASP.NET之Datalist详解(分页)
- Ext Grid Json分页(asp.net)
- MDX:获取当前日期及Year,Month,Day
- Crack C语言之-指针之一
- BW:Interrupt Process & Decision Between Multiple Alternatives
- 编程中的错误处理和异常处理
- jsp和jspf的关系
- asp.net 常见操作----分页(1)
- 如何查看GTK+的版本?
- ShopEx 商品参数修改
- 代码动态创建ODBC数据源
- 完成端口(iocp)的一个例子
- 盗版1————VIM 使用简介
- 架构的目标 和 种类
- test
- 微软,Google面试题 (32) —— O(1)时间删除节点