using Microsoft.SharePoint; using Microsoft.SharePoint.Utilities; using System; using System.Globalization; using System.Runtime.CompilerServices; using System.Threading; using System.Web.UI; using System.Web.UI.WebControls; namespace SPSolutions.SharePoint.WebControls { public class SPManualPager : WebControl, IPostBackEventHandler { private PagingCalculator m_pagingCalculator; private static readonly string NextPageCommand = "previouspage"; private static readonly string PreviousPageCommand = "nextpage"; public event EventHandler ClickNext; //[MethodImpl(MethodImplOptions.Synchronized)] //add //{ // //this.ClickNext = (EventHandler)Delegate.Combine(this.ClickNext, value); // this.ClickNext += value; //} //[MethodImpl(MethodImplOptions.Synchronized)] //remove //{ // //this.ClickNext = (EventHandler)Delegate.Remove(this.ClickNext, value); // this.ClickNext -= value; //} public event EventHandler ClickPrevious; //{ // [MethodImpl(MethodImplOptions.Synchronized)] // add // { // //this.ClickPrevious = (EventHandler)Delegate.Combine(this.ClickPrevious, value); // this.ClickPrevious += value; // } // [MethodImpl(MethodImplOptions.Synchronized)] // remove // { // //this.ClickPrevious = (EventHandler)Delegate.Remove(this.ClickPrevious, value); // this.ClickPrevious -= value; // } //} public int PageNumber { get { return this.ParseIntegerFromViewState(this.ViewState["PageNumber"], 1); } set { this.ViewState["PageNumber"] = value; } } public int PageSize { get { return this.ParseIntegerFromViewState(this.ViewState["PageSize"], 10); } set { this.ViewState["PageSize"] = value; } } public int NumberOfRecords { get { return this.ParseIntegerFromViewState(this.ViewState["NumberOfRecords"], 0); } set { this.ViewState["NumberOfRecords"] = value; } } public int LowestDataItemIndex { get { return this.m_pagingCalculator.BeginningIndex; } } public int HighestDataItemIndex { get { return this.m_pagingCalculator.EndingIndex; } } private static string PreviousImageUrl { get { return "/_layouts/15/" + SPContext.Current.Web.Language.ToString(CultureInfo.InvariantCulture) + "/images/prev.gif"; } } public bool PreviousPageLinkIsEnabled { get { return this.m_pagingCalculator.HasPreviousPage; } } private static string NextImageUrl { get { return "/_layouts/15/" + SPContext.Current.Web.Language.ToString(CultureInfo.InvariantCulture) + "/images/next.gif"; } } public bool NextPageLinkIsEnabled { get { return this.m_pagingCalculator.HasNextPage; } } public SPManualPager() { this.m_pagingCalculator = new PagingCalculator(1, 10, 0); } private int ParseIntegerFromViewState(object viewStateObject, int defaultValue) { if (viewStateObject == null) { return defaultValue; } if (viewStateObject is int) { return (int)viewStateObject; } int result; if (!int.TryParse(viewStateObject.ToString(), out result)) { return defaultValue; } return result; } protected override void Render(HtmlTextWriter output) { this.m_pagingCalculator.NumberOfRecords = this.NumberOfRecords; this.m_pagingCalculator.PageSize = this.PageSize; this.m_pagingCalculator.PageNumber = this.PageNumber; if (this.LowestDataItemIndex >= 0 && this.HighestDataItemIndex >= 0) { output.Write("
| "); this.RenderImage(output, this.PreviousPageLinkIsEnabled, SPManualPager.PreviousPageCommand, SPManualPager.PreviousImageUrl, "/_layouts/15/images/blank.gif", SPResource.GetString("multipagesPreviousPage", new object[0])); output.Write(" | "); output.Write(" "); output.Write((this.LowestDataItemIndex + 1).ToString(Thread.CurrentThread.CurrentCulture.NumberFormat)); output.Write("-"); output.Write((this.HighestDataItemIndex + 1).ToString(Thread.CurrentThread.CurrentCulture.NumberFormat)); output.Write(" | "); this.RenderImage(output, this.NextPageLinkIsEnabled, SPManualPager.NextPageCommand, SPManualPager.NextImageUrl, "/_layouts/15/images/blank.gif", SPResource.GetString("multipagesNextPage", new object[0])); output.Write(" |