因为数据量很大所以自己做了一个通用的分页存储过程,
可以得到相应的参数,
但是显示这一块做的不是很好
我做的方法是:用两给BUTTON 点击frobut  和 Nextbut 
来获取前一页和下一页.
其中一个事件如下:
 protected void butfor_Click(object sender, EventArgs e)
        {
            if (pageindex > 1)
            {
                pageindex = pageindex - 1;
                UsageManagement um = new UsageManagement();
  _grid.DataSource = um.FindCustomerCdr(customerId, servicetypeid, startdate, enddate, pageindex,0,pagesize).Tables[0];
                _grid.DataBind();
                this.textPage.Text = pageindex + "/" + totalindex;
            }
        }
这样显示不是好看.
而且两个BUTTON在页面中布局不很麻烦
怎样才能好好的显示呀本人以前没做过做b/s系统
谢谢

解决方案 »

  1.   

     换label.或其他控件。不一定要button
      

  2.   

    把分页控件做成一个自定义的控件,把换页操作放到外面的委托里做,我这里有个现成的.namespace Framework.UI.PluginUiControl.PagingNavigator
        {
        using System;
        using System.ComponentModel;
        using System.Collections;
        using System.Collections.Generic;
        using System.Security.Permissions;    using System.Web;
        using System.Web.UI;
        using System.Web.UI.WebControls;    [
        DefaultEvent( "PagingChanged" ),
        DefaultProperty( "" ),
        ToolboxData( "<{0}:PagingNavigator runat=\"server\"> </{0}:PagingNavigator>" )
        ]
        public class PagingNavigator : CompositeControl
            {
            #region ***** Constants and Enumurations *****************************
            public enum ItemsCountOfPage
                {
                /// <summary>5行</summary>
                Line5 = 5,
                /// <summary>10行</summary>
                Line10 = 10,
                /// <summary>20行</summary>
                Line20 = 20,
                /// <summary>50行</summary>
                Line50 = 50,
                /// <summary>100行</summary>
                Line100 = 100,
                /// <summary>全て</summary>
                LineAll = 0
                }        private const int DEFAULT_TOTAL_ITEMES = 0;     
            private const int DEFAULT_CURENT_PAGE = 1;     
            private const ItemsCountOfPage DEFAULT_ITEMS_PER_PAGE =
                ItemsCountOfPage.Line20;                    
            private const int MINIMUM_ITEMS_PER_PAGE = 5;   
            private const int DISPLAY_PAGE_LINK_COUNT = 5;  
            private const int TOP_PAGE_NO = 1;                     
            private const int NUMBER_OF_OBJECTS = 3;
            private const int COLUMN_TOTAL_ITEMS = 0;      
            private const int COLUMN_ITEMS_PER_PAGE = 1;    
            private const int COLUMN_CURRENT_PAGE = 2;              // 画像ファイル名
            private const string IMAGE_FILE_TOP_PAGE =
                "~/images/pagebtn_first.gif";                           
            private const string IMAGE_FILE_MINUS5_PAGE =
                "~/images/pagebtn_minus5.gif";                         
            private const string IMAGE_FILE_PLUS5_PAGE =
                "~/images/pagebtn_plus5.gif";                           
            private const string IMAGE_FILE_LAST_PAGE =
                "~/images/pagebtn_last.gif";                                   // CSS
            private const string CSS_PAGING = "List_toolbar";           
            private const string CSS_PAGENAVI = "PagingNavigation";     
            private const string CSS_ONEGROUP = "OneGroup";             
            private const string CSS_NUM_OF_ITEM = "numberOfItems";     
            private const string CSS_NUM_OF_PAGE = "numberOfPageView";  
            private const string CSS_TURN_OVER = "pageTurnOver";        
            private const string CSS_CURRENT_PAGE = "Now";                      #endregion
            #region ***** Constructors *******************************************
            #endregion
            #region ***** Public Member Functions ********************************
            [
            Category( "Action" ),
            Description( "Action" )
            ]
            public event EventHandler PagingChanged
                {
                add
                    {
                    Events.AddHandler( m_eventPagingChangedKey, value );
                    }
                remove
                    {
                    Events.RemoveHandler( m_eventPagingChangedKey, value );
                    }
                }
            #endregion
            #region ***** Protected Member Functions *****************************
            protected override void CreateChildControls( )
                {
                Controls.Clear();
                initialize();
                makeItemCountDropDown();            m_topLinkButton = new LinkButton();
                m_topLinkButton.ID = "TopPageButton";
                m_topLinkButton.CommandArgument = TOP_PAGE_NO.ToString();
                m_topLinkButton.Command += new CommandEventHandler( selectedPageChanged );
                m_topImage = new Image();
                m_topImage.AlternateText =
                    m_l10nAssist.GetL10nString( PluginUiControl.RES_BTN_TOFIRSTPAGE );
                m_topImage.ImageUrl = ResolveUrl( IMAGE_FILE_TOP_PAGE );
                m_topLinkButton.Controls.Add( m_topImage );            int minus5PageNo = ( ( m_startPageNumber - 1 ) < TOP_PAGE_NO )
                    ? TOP_PAGE_NO : m_startPageNumber - 1;
                m_minus5LinkButton = new LinkButton();
                m_minus5LinkButton.ID = "Minus5PageButton";
                m_minus5LinkButton.CommandArgument = minus5PageNo.ToString();
                m_minus5LinkButton.Command += new CommandEventHandler( selectedPageChanged );
                m_minus5Image = new Image();
                m_minus5Image.AlternateText =
                    m_l10nAssist.GetL10nString( PluginUiControl.RES_BTN_MINUS5PAGE );
                m_minus5Image.ImageUrl = ResolveUrl( IMAGE_FILE_MINUS5_PAGE );
                m_minus5LinkButton.Controls.Add( m_minus5Image );            m_currentPageButton = new Label();
                m_pageButtonList = new List<LinkButton>( DISPLAY_PAGE_LINK_COUNT - 1 );
                for ( int indx = 0; indx < DISPLAY_PAGE_LINK_COUNT - 1; indx++ )
                    {
                    LinkButton pageButton = new LinkButton();
                    pageButton.Command += new CommandEventHandler( selectedPageChanged );
                    m_pageButtonList.Add( pageButton );
                    }
                int plus5PageNo = ( m_totalPages < ( m_endPageNumber + 1 ) )
                    ? m_totalPages : m_endPageNumber + 1;
                m_plus5LinkButton = new LinkButton();
                m_plus5LinkButton.ID = "Plus5PageButton";
                m_plus5LinkButton.CommandArgument = plus5PageNo.ToString();
                m_plus5LinkButton.Command += new CommandEventHandler( selectedPageChanged );
                m_plus5Image = new Image();
                m_plus5Image.AlternateText =
                    m_l10nAssist.GetL10nString( PluginUiControl.RES_BTN_PLUS5PAGE );
                m_plus5Image.ImageUrl = ResolveUrl( IMAGE_FILE_PLUS5_PAGE );
                m_plus5LinkButton.Controls.Add( m_plus5Image );            m_lastLinkButton = new LinkButton();
                m_lastLinkButton.ID = "LastPageButton";
                m_lastLinkButton.CommandArgument = m_totalPages.ToString();
                m_lastLinkButton.Command += new CommandEventHandler( selectedPageChanged );
                m_lastImage = new Image();
                m_lastImage.AlternateText =
                    m_l10nAssist.GetL10nString( PluginUiControl.RES_BTN_TOLASTPAGE );
                m_lastImage.ImageUrl = ResolveUrl( IMAGE_FILE_LAST_PAGE );
                m_lastLinkButton.Controls.Add( m_lastImage );
                this.Controls.Add( m_itemCountDdl );
                this.Controls.Add( m_topLinkButton );
                this.Controls.Add( m_minus5LinkButton );
                this.Controls.Add( m_currentPageButton );
                foreach ( LinkButton pageButton in m_pageButtonList )
                    {
                    this.Controls.Add( pageButton );
                    }
                this.Controls.Add( m_plus5LinkButton );
                this.Controls.Add( m_lastLinkButton );
                }
            protected override void OnPreRender( EventArgs i_e )
                {
                m_itemCountDdl.SelectedValue = ( ( int ) ItemsPerPage ).ToString();            int pageButtonIndx = 0;
                for ( int indx = 0; indx < DISPLAY_PAGE_LINK_COUNT; indx++ )
                    {
                    if ( CurrentPage != ( m_startPageNumber + indx ) )
                        {
                        LinkButton pageButton = m_pageButtonList[ pageButtonIndx++ ];
                        pageButton.CommandArgument = ( m_startPageNumber + indx ).ToString();
                        }
                    }
                }        #endregion自己研究一下吧
      

  3.   

            protected override void Render( HtmlTextWriter writer )
                {
                if ( m_renderToolbarDiv )
                    {
                    writer.AddAttribute( HtmlTextWriterAttribute.Class, CSS_PAGING, true );
                    writer.RenderBeginTag( HtmlTextWriterTag.Div );
                    }
                writer.AddAttribute( HtmlTextWriterAttribute.Class, CSS_PAGENAVI, true );
                writer.RenderBeginTag( HtmlTextWriterTag.Div );            writer.AddAttribute( HtmlTextWriterAttribute.Id, CSS_NUM_OF_ITEM, true );
                writer.AddAttribute( HtmlTextWriterAttribute.Class, CSS_ONEGROUP, true );
                writer.AddAttribute( HtmlTextWriterAttribute.Title,
                    m_l10nAssist.GetL10nString( PluginUiControl.RES_LBL_NUMBEROFITEMS ), true );
                writer.RenderBeginTag( HtmlTextWriterTag.Span );
                writer.Write( displayItemNoPerTotal() );
                writer.RenderEndTag();
                writer.AddAttribute( HtmlTextWriterAttribute.Id, CSS_NUM_OF_PAGE, true );
                writer.AddAttribute( HtmlTextWriterAttribute.Class, CSS_ONEGROUP, true );
                writer.AddAttribute( HtmlTextWriterAttribute.Title,
                    m_l10nAssist.GetL10nString( PluginUiControl.RES_LBL_ITEMSPERPAGE ), true );
                writer.RenderBeginTag( HtmlTextWriterTag.Span );
                            m_itemCountDdl.RenderControl( writer );            writer.Write( m_l10nAssist.GetL10nString( PluginUiControl.RES_LBL_PERPAGE ) );
                writer.RenderEndTag();            if ( isPageButtonsDisplayed() )
                    {
                    // <span id="pageTurnOver">
                    writer.AddAttribute( HtmlTextWriterAttribute.Id, CSS_TURN_OVER, true );
                    writer.AddAttribute( HtmlTextWriterAttribute.Class, CSS_ONEGROUP, true );
                    writer.RenderBeginTag( HtmlTextWriterTag.Span );
                    if ( !isCurrentPageTopPage() )
                        {
                        m_topLinkButton.RenderControl( writer );
                        }                if ( isReverseButtonDisplayed() )
                        {
                        m_minus5LinkButton.RenderControl( writer );
                        }
                    setPagingButton( writer );
                    if ( isNextButtonDisplayed() )
                        {
                        m_plus5LinkButton.RenderControl( writer );
                        }
                    if ( !isCurrentPageLastPage() )
                        {
                        m_lastLinkButton.RenderControl( writer );
                        }
                    writer.RenderEndTag();
                    }
                writer.RenderEndTag();
                if ( m_renderToolbarDiv )
                    {
                    writer.RenderEndTag();
                    }
                }
            protected override void OnInit( EventArgs e )
                {
                ResourceManagerAdapter resourceManagerAdapter =
                    new ResourceManagerAdapter( PluginUiControl.RESOURCE_NAME, PluginUiControl.ASSEMBLY_NAME );
                m_l10nAssist = new L10nAssist();
                m_l10nAssist.AddResourceManager( resourceManagerAdapter );
                Page.RegisterRequiresControlState( this );
                base.OnInit( e );
                }
            protected override object SaveControlState( )
                {
                object[] saveStates = new object[ NUMBER_OF_OBJECTS ];
                saveStates[ COLUMN_TOTAL_ITEMS ] = TotalItems;
                saveStates[ COLUMN_ITEMS_PER_PAGE ] = ItemsPerPage;
                saveStates[ COLUMN_CURRENT_PAGE ] = CurrentPage;
                object obj = base.SaveControlState();
                if ( null != obj )
                    {
                    return new Pair( obj, saveStates );
                    }
                return ( object ) saveStates;
                }
            protected override void LoadControlState( object i_savedState )
                {
                object saveState = i_savedState;
                if ( null != i_savedState )
                    {
                    Pair p = saveState as Pair;
                    if ( null != p )
                        {
                        base.LoadControlState( p.First );
                        saveState = p.Second;
                        }
                    object[] saveStates = ( object[] ) saveState;
                    if ( ( null != saveStates ) &&
                        ( NUMBER_OF_OBJECTS == saveStates.Length ) )
                        {
                        TotalItems = ( int ) saveStates[ COLUMN_TOTAL_ITEMS ];
                        ItemsPerPage = ( ItemsCountOfPage ) saveStates[ COLUMN_ITEMS_PER_PAGE ];                    CurrentPage = ( int ) saveStates[ COLUMN_CURRENT_PAGE ];
                        }
                    }
                }
      

  4.   

            #region ***** Properties *********************************************
            public int TotalItems
                {
                get
                    {
                    return m_totalItems;
                    }
                set
                    {
                    if ( DEFAULT_TOTAL_ITEMES <= value )
                        {
                        m_totalItems = value;
                        }
                    else
                        {
                        m_totalItems = DEFAULT_TOTAL_ITEMES;
                        }
                    initialize();
                    }
                }
            public ItemsCountOfPage ItemsPerPage
                {
                get
                    {
                    return m_itemsPerPage;
                    }
                set
                    {
                    int startItemNo = StartItemNumber;
                    if ( ( ItemsCountOfPage.Line5 == value )
                        || ( ItemsCountOfPage.Line10 == value )
                        || ( ItemsCountOfPage.Line20 == value )
                        || ( ItemsCountOfPage.Line50 == value )
                        || ( ItemsCountOfPage.Line100 == value )
                        || ( ItemsCountOfPage.LineAll == value ) )
                        {
                        m_itemsPerPage = value;
                        }
                    else
                        {
                        m_itemsPerPage = DEFAULT_ITEMS_PER_PAGE;
                        }
                    if ( ItemsPerPage == ItemsCountOfPage.LineAll )
                        {
                        CurrentPage = DEFAULT_CURENT_PAGE;
                        }
                    else
                        {
                        CurrentPage = startItemNo / ( int ) m_itemsPerPage + 1;
                        }
                    initializeAndEventThrow();
                    }
                }
            public int CurrentPage
                {
                get
                    {
                    return m_currentPage;
                    }
                set
                    {
                    setCurrentPageNo( value );
                    initialize();
                    }
                }
            public int StartItemNumber
                {
                get
                    {
                    if ( 0 == TotalItems )
                        {
                        return 0;
                        }
                    return (int)ItemsPerPage * ( CurrentPage - 1 ) + 1;
                    }
                }
            public int EndItemNumber
                {
                get
                    {
                    int endItemNo = TotalItems;
                    if ( ItemsPerPage != ItemsCountOfPage.LineAll )
                        {
                        int no = (int)ItemsPerPage * CurrentPage;
                        if ( no < TotalItems ){
                            endItemNo = no;
                            }
                        }
                    return endItemNo;
                    }
                }
            public bool RenderToolbarDiv
                {
                set
                    {
                    m_renderToolbarDiv = value;
                    }
                }
            #endregion
            #region ***** Virtual Member Functions *******************************
            protected virtual void OnPagingChanged( EventArgs e )
                {
                // イベントハンドラが設定されていればイベントを投げる。
                EventHandler pagingChangeHandler =
                    ( EventHandler ) Events[ m_eventPagingChangedKey ];
                if ( pagingChangeHandler != null )
                    {
                    pagingChangeHandler( this, e );
                    }
                }
            private void setCurrentPageNo( int i_pageno )
                {
                if ( DEFAULT_CURENT_PAGE <= i_pageno )
                    {
                    m_currentPage = i_pageno;
                    }
                else
                    {
                    if ( 0 == m_totalPages )
                        {
                        m_currentPage = 0;
                        }
                    else
                        {
                        m_currentPage = DEFAULT_CURENT_PAGE;
                        }
                    }
                }
      

  5.   

            private void initialize( )
                {
                m_totalPages = 1;
                if ( 0 < TotalItems )
                    {
                    if ( ItemsPerPage != ItemsCountOfPage.LineAll )
                        {
                        m_totalPages = TotalItems / ( int ) ItemsPerPage;
                        if ( 0 < ( TotalItems % ( int ) ItemsPerPage ) )
                            {
                            m_totalPages++;
                            }
                        }
                    if ( m_totalPages < CurrentPage )
                        {
                        setCurrentPageNo( m_totalPages );
                        }
                    int indx = CurrentPage / DISPLAY_PAGE_LINK_COUNT;
                    m_startPageNumber = indx * DISPLAY_PAGE_LINK_COUNT;
                    if ( 0 < ( CurrentPage % DISPLAY_PAGE_LINK_COUNT ) )
                        {
                        m_startPageNumber++;
                        }
                    else
                        {
                        m_startPageNumber -= DISPLAY_PAGE_LINK_COUNT - 1;
                        }
                    m_endPageNumber = m_startPageNumber + DISPLAY_PAGE_LINK_COUNT - 1;
                    }
                else
                    {
                    setCurrentPageNo( 0 );
                    m_startPageNumber = 0;
                    m_endPageNumber = 0;
                    }
                }
            private void selectedPageChanged( object i_sender, CommandEventArgs i_eventArgs )
                {
                int newPage = -1;
                if ( true == Int32.TryParse( ( string ) i_eventArgs.CommandArgument, out newPage ) )
                    {
                    changeCurrentPageNumber( newPage );
                    }
                }
            private void numberOfItemsChanged( object i_sender, EventArgs i_eventArgs )
                {
                int newItemsPerPage = -1;
                if ( true == Int32.TryParse( (( DropDownList ) i_sender).SelectedValue,
                    out newItemsPerPage ) )
                    {
                    changeItemsPerPage( newItemsPerPage );
                    }
                }
            private string displayItemNoPerTotal( )
                {
                return string.Format( "{0}-{1}/{2}",
                    StartItemNumber, EndItemNumber, TotalItems );
                }
            private void makeItemCountDropDown( )
                {
                m_itemCountDdl = new DropDownList();
                m_itemCountDdl.Items.Add(
                    new ListItem( m_l10nAssist.GetL10nString( PluginUiControl.RES_ITM_LINE5 ),
                    ( ( int ) ItemsCountOfPage.Line5 ).ToString() ) );
                m_itemCountDdl.Items.Add(
                    new ListItem( m_l10nAssist.GetL10nString( PluginUiControl.RES_ITM_LINE10 ),
                    ( ( int ) ItemsCountOfPage.Line10 ).ToString() ) );
                m_itemCountDdl.Items.Add(
                    new ListItem( m_l10nAssist.GetL10nString( PluginUiControl.RES_ITM_LINE20 ),
                    ( ( int ) ItemsCountOfPage.Line20 ).ToString() ) );
                m_itemCountDdl.Items.Add(
                    new ListItem( m_l10nAssist.GetL10nString( PluginUiControl.RES_ITM_LINE50 ),
                    ( ( int ) ItemsCountOfPage.Line50 ).ToString() ) );
                m_itemCountDdl.Items.Add(
                    new ListItem( m_l10nAssist.GetL10nString( PluginUiControl.RES_ITM_LINE100 ),                ( ( int ) ItemsCountOfPage.Line100 ).ToString() ) );
                m_itemCountDdl.Items.Add(
                    new ListItem( m_l10nAssist.GetL10nString( PluginUiControl.RES_ITM_LINEALL ),                ( ( int ) ItemsCountOfPage.LineAll ).ToString() ) );
                m_itemCountDdl.AutoPostBack = true;
                m_itemCountDdl.SelectedIndexChanged += new EventHandler( numberOfItemsChanged );            m_itemCountDdl.SelectedValue = ( ( int ) ItemsPerPage ).ToString();
                }
            private void initializeAndEventThrow( )
                {
                initialize();
                OnPagingChanged( EventArgs.Empty );
                }
            private void changeCurrentPageNumber( int i_newPageNumber )
                {
                CurrentPage = i_newPageNumber;
                initializeAndEventThrow();
                }
            private void changeItemsPerPage( int i_newItemsPerPage )
                {
                int startItemNo = StartItemNumber;
                ItemsPerPage = (ItemsCountOfPage)i_newItemsPerPage;
                }
            private void setPagingButton( HtmlTextWriter i_writer )
                {
                int buttonIndx = 0;
                for ( int indx = 0; indx < DISPLAY_PAGE_LINK_COUNT; indx++ )
                    {
                    int pageNo = m_startPageNumber + indx;
                    if ( CurrentPage == pageNo )
                        {
                        Label pageButton = m_currentPageButton;
                        pageButton.Text = pageNo.ToString();
                        pageButton.ToolTip = m_l10nAssist.GetL10nString( PluginUiControl.RES_BTN_CURRENTPAGE );
                        pageButton.CssClass = CSS_CURRENT_PAGE;
                        pageButton.RenderControl( i_writer );
                        }
                    else
                        {
                        LinkButton pageButton = ( LinkButton ) m_pageButtonList[ buttonIndx++ ];                    pageButton.CommandArgument = pageNo.ToString();
                        pageButton.Text = ( 1 == m_totalPages || pageNo > m_totalPages ) ?
                            "" : pageNo.ToString();
                        pageButton.ToolTip = pageNo.ToString() +
                            m_l10nAssist.GetL10nString( PluginUiControl.RES_BTN_TOPAGE );
                        if ( 1 != m_totalPages && pageNo <= m_totalPages )
                            {
                            pageButton.RenderControl( i_writer );
                            }
                        }
                    }
                }
            private bool isPageButtonsDisplayed( )
                {
                return ( 1 < m_totalPages );
                }
            private bool isReverseButtonDisplayed( )
                {
                return( TOP_PAGE_NO < m_startPageNumber );
                }
            private bool isNextButtonDisplayed( )
                {
                return( ( m_startPageNumber + DISPLAY_PAGE_LINK_COUNT - 1 ) < m_totalPages );
                }
            private bool isCurrentPageTopPage( )
                {
                return ( TOP_PAGE_NO == CurrentPage );
                }
            private bool isCurrentPageLastPage( )
                {
                return ( m_totalPages == CurrentPage );
                }        #endregion
            #region ***** Private Data Members ***********************************
            private int m_totalItems = DEFAULT_TOTAL_ITEMES;
            private int m_currentPage = DEFAULT_CURENT_PAGE;
            private int m_totalPages;
            private int m_startPageNumber = 0;
            private int m_endPageNumber;
            private DropDownList m_itemCountDdl;
            private LinkButton m_topLinkButton;
            private Image m_topImage;
            private LinkButton m_minus5LinkButton;
            private Image m_minus5Image;
            private Label m_currentPageButton;
            private List<LinkButton> m_pageButtonList;
              private LinkButton m_plus5LinkButton;
            private Image m_plus5Image;
            protected LinkButton m_lastLinkButton;
            private Image m_lastImage;
            private bool m_renderToolbarDiv = true;
            private L10nAssist m_l10nAssist;
            private static readonly object m_eventPagingChangedKey = new object();
            #endregion
            }
        }
      

  6.   

    这是我们现在用的换页的控件,有兴趣就研究一下.你也可以自己把按钮放在一个panel里。自己灵活控制就行了。