1.自定义分页
PageNumberer.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Control that displays a list of page numbers based on the selected page,
/// number of displayed pages, and the count of pages
/// </summary>
namespace ClubSite
{
public class PageNumberer : WebControl, IPostBackEventHandler
{
private int m_SelectedPage, m_Count, m_displayedPages;
public PageNumberer()
{
//No constructor logic.
}
public int SelectedPage
{
get
{
if (m_SelectedPage == 0)
{
object o = ViewState["SelectedPage"];
m_SelectedPage = (o != null) ? (int)o : 1;
}
return m_SelectedPage;
}
set
{
ViewState["SelectedPage"] = value;
m_SelectedPage = value;
}
}

public int Count
{
get
{
if (m_Count == 0)
{
object o = ViewState["Count"];
m_Count = (o != null) ? (int)o : 1;
}
return m_Count;
}
set
{
ViewState["Count"] = value;
m_Count = value;
}
}
public int DisplayedPages
{
get
{
if (m_displayedPages == 0)
{
object o = ViewState["DisplayedPages"];
m_displayedPages = (o != null) ? (int)o : 1;
}
return m_displayedPages;
}
set
{
ViewState["DisplayedPages"] = value;
m_displayedPages = value;
}
}
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Div;
// uncomment for a table
// return HtmlTextWriterTag.Table;
}
}
protected override void RenderContents(HtmlTextWriter writer)
{
int prevListCount, nextListCount, startPage, endPage;
prevListCount = Math.Abs((m_displayedPages - 1) / 2);
if (m_SelectedPage <= prevListCount) prevListCount = m_SelectedPage - 1;
nextListCount = m_displayedPages - prevListCount - 1;
if (m_SelectedPage + nextListCount > m_Count) nextListCount = m_Count - m_SelectedPage;
startPage = m_SelectedPage - prevListCount;
endPage = m_SelectedPage + nextListCount;
// uncomment for a table
// writer.RenderBeginTag(HtmlTextWriterTag.Tr);
if (startPage > 1)
{
renderItem(writer, "« First", 1);
}
if (SelectedPage > 1)
{
renderItem(writer, "< Prev", SelectedPage - 1);
}
for (int count = startPage; count <= endPage; count++)
{
string label;
if (count != endPage)
label = count.ToString() + ",";
else
label = count.ToString();
if (count == m_SelectedPage)
{
renderItem(writer, label, 0);
}
else
{
renderItem(writer, label, count);
}
}
if (SelectedPage < m_Count)
{
renderItem(writer, "Next >", SelectedPage + 1);
}
if (endPage < m_Count)
{
renderItem(writer, "Last »", m_Count);
}
}
void renderItem(HtmlTextWriter writer, string text, int pageNum)
{
writer.RenderBeginTag(HtmlTextWriterTag.Span);
if (pageNum!=0)
{
writer.AddAttribute(HtmlTextWriterAttribute.Href, Page.ClientScript.GetPostBackClientHyperlink(this,pageNum.ToString()));
writer.RenderBeginTag(HtmlTextWriterTag.A);
}
writer.Write(text);
if (pageNum!=0)
{
writer.RenderEndTag();
}
writer.RenderEndTag();
}
private static readonly object EventSelectedPageChanged = null;
public event EventHandler SelectedPageChanged
{
add
{
Events.AddHandler(EventSelectedPageChanged,value);
}
remove
{
Events.RemoveHandler(EventSelectedPageChanged, value);
}
}
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
int newPage;
if (int.TryParse(eventArgument, out newPage))
{
this.SelectedPage = newPage;
OnSelectedPageChanged(EventArgs.Empty);
}
}
protected virtual void OnSelectedPageChanged(EventArgs e)
{
EventHandler changehandler = (EventHandler)Events[EventSelectedPageChanged];
if (changehandler != null)
{
changehandler(this, e);
}
}
}
}
存储过程:

ALTER PROCEDURE PagedAnnouncementList
(
@pageNum INT = 1,
@pageSize INT = 10
)
AS
DECLARE @rows INT
DECLARE @keydate DATETIME
DECLARE @keyid INT
DECLARE @rowCount FLOAT /* yes we need a float for the math */
IF @pageNum = 1
BEGIN
SET @keydate= 0
SET @keyid=0
END
ELSE
BEGIN
/* get the values for the date and row */
SELECT @rows = (@pageNum-1) * @pageSize
SET ROWCOUNT @rows
SELECT @keydate=itemdate, @keyid=id FROM announcements ORDER BY itemdate ASC, id ASC
END
SELECT @rowCount=COUNT(*) FROM announcements
SET ROWCOUNT @pageSize
SELECT id, itemdate, title, description, photo FROM Announcements
WHERE (itemdate > @keydate OR
(itemdate = @keydate) AND (id > @keyid))
ORDER BY itemdate ASC, id ASC
RETURN CEILING(@rowCount/@pageSize)
前台页面
<%@ Page Language="C#" MasterPageFile="~/Default.master" Title="News Articles" %>
<%@ Register TagPrefix="Club" Namespace="ClubSite" %>
<%@ Register TagPrefix="Club" TagName="LoginBanner" Src="LoginBanner.ascx" %>
<%@ Register TagPrefix="Club" TagName="ImageThumbnail" Src="ImageThumbnail.ascx" %>
<script runat="server">
protected void SqlDataSource1_Selected(object sender, System.Web.UI.WebControls.SqlDataSourceStatusEventArgs e)
{
int pages;
pages = (int)e.Command.Parameters["@pageCount"].Value;
pn1.Count = pages;
Pn2.Count = pages;
}
protected void pn1_SelectedPageChanged(object sender, System.EventArgs e)
{
Pn2.SelectedPage = pn1.SelectedPage;
}
protected void Pn2_SelectedPageChanged(object sender, System.EventArgs e)
{
pn1.SelectedPage = Pn2.SelectedPage;
}
private bool IsAdmin;
protected void Page_Load(object sender, System.EventArgs e)
{
IsAdmin = User.IsInRole("Administrators");
panel1.Visible = IsAdmin;
}
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<div id="body">
<Club:LoginBanner ID="LoginBanner1" runat="server" />
<!--
Left column
-->
<div id="columnleft">
<a name="content_start" id="content_start"></a>
<div class="leftblock">
<h2>
News Articles</h2>
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad
minim veniam, quis nostrud exercitation ulliam corper suscipit lobortis nisl ut
aliquip ex ea commodo consequat. Duis autem veleum iriure dolor in hendrerit in
vulputate velit esse molestie consequat, vel willum lunombro dolore eu feugiat nulla
facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent
luptatum zzril delenit augue duis dolore te feugait nulla facilisi.</p>
</div>
</div>
<!--
Right column
-->
<div id="columnright">
<div class="rightblock">
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ClubSiteDB %>"
SelectCommand="PagedAnnouncementList" SelectCommandType="StoredProcedure" OnSelected="SqlDataSource1_Selected">
<SelectParameters>
<asp:ControlParameter Name="pageNum" ControlID="pn1" PropertyName="SelectedPage" />
<asp:Parameter DefaultValue="10" Name="pageSize" Type="Int32" />
<asp:Parameter Name="pageCount" Direction="ReturnValue" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
<asp:Panel ID="panel1" runat="server" CssClass="actionbuttons">
<Club:RolloverLink ID="RemoveBtn" runat="server" Text="Add new Article" NavigateURL="News_Edit.aspx?Action=New" />
</asp:Panel>
<div class="dashedline">
</div>
<div class="newscrumbs">
Page:
<Club:PageNumberer ID="pn1" runat="server" CssClass="PageNumbers" DisplayedPages="7"
OnSelectedPageChanged="pn1_SelectedPageChanged" />
</div>
<div class="dashedline">
</div>
<!-- begin news item -->
<asp:Repeater ID="DataList1" runat="server" DataSourceID="SqlDataSource1">
<ItemTemplate>
<div class="listitem">
<div class="thumbnail">
<a href='<%# "News_View.aspx?Articleid=" + Convert.ToString( Eval("ID"))%>'>
<Club:ImageThumbnail ID="ImageThumbnail1" runat="server" PhotoID='<%# Eval("photo") %>'
NoPhotoImg="images/news.jpg" />
</a>
</div>
<asp:Panel ID="panel2" runat="server" Visible='<%#IsAdmin %>'>
<Club:RolloverLink ID="EditBtn" runat="server" Text="Edit" NavigateURL='<%# "News_Edit.aspx?Action=Edit&ArticleID=" + Convert.ToString( Eval("ID")) %>' />
<Club:RolloverLink ID="RemoveBtn" runat="server" Text="Remove" NavigateURL='<%# "News_Edit.aspx?Action=Remove&ArticleID=" + Convert.ToString( Eval("ID")) %>' />
</asp:Panel>
<h3>
<asp:Label ID="itemdateLabel" runat="server" Text='<%# Eval("itemdate","{0:d}") %>' />
<a href='<%# "news_view.aspx?articleid=" + Convert.ToString( Eval("ID"))%>'>
<asp:Label ID="titleLabel" runat="server" Text='<%# Eval("title") %>' />
</a>
</h3>
<p>
<asp:Label ID="descriptionLabel" runat="server" Text='<%# SharedRoutines.truncate((string)Eval("description")) %>' />
<a href='<%# "news_view.aspx?articleid=" + Convert.ToString( Eval("ID"))%>'>read more »</a></p>
<div class="clearlist">
</div>
</div>
</ItemTemplate>
</asp:Repeater>
<div class="dashedline">
</div>
<div class="newscrumbs">
Page:
<Club:PageNumberer ID="Pn2" runat="server" DisplayedPages="7" CssClass="PageNumbers"
OnSelectedPageChanged="Pn2_SelectedPageChanged" />
</div>
</div>
</div>
<div class="clear2column">
</div>
</div>
</asp:Content>
2。还有其他的就不列举了。



浙公网安备 33010602011771号