天道酬勤,厚德载物

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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, 
"&laquo; First"1);
            }


            
if (SelectedPage > 1)
            
{
                renderItem(writer, 
"&lt; 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 &gt;", SelectedPage + 1);
            }


            
if (endPage < m_Count)
            
{
                renderItem(writer, 
"Last &raquo;", 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 
= @keydateAND (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">
            
<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">
                                
<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}") %>' />
                                
&nbsp;&nbsp;&nbsp;&nbsp; <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")) %>' />
                                
<href='<%# "news_view.aspx?articleid=" + Convert.ToString( Eval("ID"))%>'>read more &raquo;</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。还有其他的就不列举了。

 

posted on 2006-09-07 22:51  cobbles  阅读(277)  评论(0编辑  收藏  举报