");
return sb.ToString();
}
#endregion
#region Build Middle
protected virtual string BuildMiddle(HtmlTextWriter output)
{
StringBuilder sb = new StringBuilder();
return sb.ToString();
}
#endregion
#region Build Bottom
protected virtual string BuildBottom(string resultsHTML)
{
StringBuilder sb = new StringBuilder();
if(_ResultsStyle.Length>0)
{
sb.AppendFormat("
", _ResultsStyle);
}
else
{
sb.Append("
");
}
sb.Append(resultsHTML);
sb.Append("
");
return sb.ToString();
}
#endregion
//Methods (Private)
#region Bind current page to QueryString
protected virtual void BindToQueryString()
{
if(Context!=null && Context.Request.QueryString[QueryStringKey]!=null && !IgnoreQueryString)
{
if(IsNumeric(Context.Request.QueryString[QueryStringKey].ToString()))
{
int newPage = int.Parse(Context.Request.QueryString.Get(QueryStringKey));
ChangePage(newPage);
}
}
}
#endregion
#region Change Page
protected virtual void ChangePage(int newPage)
{
if (newPage<=1)
{
newPage = 1;
}
if (newPage > _PagedDataSet.PageCount)
{
newPage = _PagedDataSet.PageCount;
}
if(newPage > MaxPages)
{
newPage = MaxPages;
}
_CurrentPage = newPage;
}
#endregion
#region Build Page Number Links
//Build Page Number Links
protected virtual string BuildPageNumbers(int currentPage, int pageCount)
{
StringBuilder Pages = new StringBuilder();
string PageNumberStyleTag = "";
if(_PageNumberStyle.Trim().Length>0)
{
PageNumberStyleTag = string.Format(" style='{0}'", _PageNumberStyle);
}
int StartPage=1;
//End Page
int EndPage=0;
if(pageCount>MaxPages)
{
EndPage = MaxPages;
}
else
{
EndPage = pageCount;
}
//Adjust for slider
if(UseSlider)
{
int Half = (int)Math.Floor((double)(SliderSize-1)/2);
//8: Half = 3
//7: Half = 3
int NumAbove = currentPage + Half + ((SliderSize-1)%2);
int NumBelow = currentPage - Half;
if(NumBelow<1)
{
NumAbove += (1 - NumBelow);
NumBelow = 1;
}
if(NumAbove>EndPage)
{
NumBelow -= (NumAbove - EndPage);
if(NumBelow<1)
{
NumBelow = 1;
}
NumAbove = EndPage;
}
StartPage = NumBelow;
EndPage = NumAbove;
}
for(int i=StartPage;i<=EndPage;i++)
{
int RecordStart;
int RecordEnd;
//For Display
if(Context==null)
{
RecordStart = ((i-1)*_PagedDataSet.PageSize)+1;
RecordEnd = i * _PagedDataSet.PageSize;
if(i>StartPage)
{
if(PageNumbersSeparator.ToLower()==" ")
{
Pages.AppendFormat("{0}", PageNumbersSeparator);
}
else
{
Pages.AppendFormat(" {0} ", PageNumbersSeparator);
}
}
if(i==StartPage)
{
if(PageNumbersDisplay==PageNumbersDisplayType.Numbers)
{
Pages.AppendFormat("
{0}", i.ToString());
}
else
{
Pages.AppendFormat("[
{0}-{1}]", RecordStart, RecordEnd);
}
}
else
{
if(PageNumbersDisplay==PageNumbersDisplayType.Numbers)
{
Pages.AppendFormat("
{0}", i.ToString());
}
else
{
Pages.AppendFormat("[
{0}-{1}]", RecordStart, RecordEnd);
}
}
}
else
{
//For Runtime.
//Figure out RecordStart
RecordStart = ((i-1)*_PagedDataSet.PageSize) + 1;
//Figure out RecordEnd
if(i*_PagedDataSet.PageSize>_PagedDataSet.DataSourceCount)
{
RecordEnd = _PagedDataSet.DataSourceCount;
}
else if(_PagedDataSet.Count ==_PagedDataSet.PageSize)
{
RecordEnd = (RecordStart - 1) + _PagedDataSet.PageSize;
}
else
{
RecordEnd = (RecordStart - 1) + _PagedDataSet.Count;
}
if(i>StartPage)
{
if(PageNumbersSeparator.ToLower()==" ")
{
Pages.AppendFormat("{0}", PageNumbersSeparator);
}
else
{
Pages.AppendFormat(" {0} ", PageNumbersSeparator);
}
}
if(i==currentPage)
{
if(PageNumbersDisplay==PageNumbersDisplayType.Numbers)
{
Pages.AppendFormat("
{0}", i.ToString());
}
else
{
Pages.AppendFormat("[
{0}-{1}]", RecordStart, RecordEnd);
}
}
else
{
//Set up PostBack link.
if(PagingMode==PagingModeType.PostBack)
{
if(PageNumbersDisplay==PageNumbersDisplayType.Numbers)
{
Pages.AppendFormat("
{3}"
, this.UniqueID
, Page.GetPostBackEventReference(this,i.ToString())
, PageNumberStyleTag
, i);
}
else
{
Pages.AppendFormat("[
{3}-{4}]"
, this.UniqueID
, Page.GetPostBackEventReference(this,i.ToString())
, PageNumberStyleTag
, RecordStart, RecordEnd);
}
}
//Set up querystring link.
else
{
if(PageNumbersDisplay==PageNumbersDisplayType.Numbers)
{
Pages.AppendFormat("
{2}"
, UpdateQueryStringItem(Context.Request, QueryStringKey, i.ToString())
, PageNumberStyleTag
, i);
}
else
{
Pages.AppendFormat("[
{2}-{3}]"
, UpdateQueryStringItem(Context.Request, QueryStringKey, i.ToString())
, PageNumberStyleTag
, RecordStart
, RecordEnd);
}
}
}
}
}
return Pages.ToString();
}
#endregion
#region Build Back/Next link Nav
protected virtual string BuildLinkNavBack(int currentPage)
{
StringBuilder LinkNav = new StringBuilder();
//Next Links
if(_PagedDataSet.IsFirstPage || _PagedDataSet.DataSourceCount==0)
{
if(ShowFirstLast)
{
LinkNav.Append(FirstText + " ");
}
LinkNav.Append(BackText);
}
else
{
//Set up PostBack link.
if(PagingMode==PagingModeType.PostBack)
{
if(ShowFirstLast)
{
LinkNav.AppendFormat("
{2} "
, this.UniqueID
, Page.GetPostBackEventReference(this,Convert.ToString(1))
, FirstText);
}
LinkNav.AppendFormat("
{2}"
, this.UniqueID
, Page.GetPostBackEventReference(this,Convert.ToString(currentPage-1))
, BackText);
}
else
{
if(ShowFirstLast)
{
LinkNav.AppendFormat("
{1} "
,UpdateQueryStringItem(Context.Request, QueryStringKey, Convert.ToString(1))
, FirstText);
}
LinkNav.AppendFormat("
{1}"
,UpdateQueryStringItem(Context.Request, QueryStringKey, Convert.ToString(currentPage-1))
, BackText);
}
}
return LinkNav.ToString();
}
protected virtual string BuildLinkNavNext(int currentPage, int pageCount)
{
StringBuilder LinkNav = new StringBuilder();
if(Context==null)
{
LinkNav.AppendFormat("
{0}", NextText);
if(ShowFirstLast)
{
LinkNav.AppendFormat("
{0}", LastText);
}
}
else if(currentPage>=MaxPages || currentPage==_PagedDataSet.PageCount)
{
LinkNav.Append(NextText);
if(ShowFirstLast)
{
LinkNav.Append(" " + LastText);
}
}
else
{
//Set up PostBack link.
if(PagingMode==PagingModeType.PostBack)
{
LinkNav.AppendFormat("
{2}"
, this.UniqueID
, Page.GetPostBackEventReference(this,Convert.ToString(currentPage+1))
, NextText);
if(ShowFirstLast)
{
LinkNav.AppendFormat("
{2}"
, this.UniqueID
, Page.GetPostBackEventReference(this,Convert.ToString(pageCount))
, LastText);
}
}
else
{
LinkNav.AppendFormat("
{1}"
,UpdateQueryStringItem(Context.Request, QueryStringKey, Convert.ToString(currentPage+1))
, NextText);
if(ShowFirstLast)
{
LinkNav.AppendFormat("
{1}"
,UpdateQueryStringItem(Context.Request, QueryStringKey, Convert.ToString(pageCount))
, LastText);
}
}
}
return LinkNav.ToString();
}
#endregion
#region Build Back/Next button Nav
protected virtual string BuildButtonNavBack(int currentPage)
{
StringBuilder ButtonNav = new StringBuilder();
//Back Buttons
if(_PagedDataSet.IsFirstPage || _PagedDataSet.DataSourceCount==0)
{
if(ShowFirstLast)
{
ButtonNav.AppendFormat("
", FirstText);
}
ButtonNav.AppendFormat("
", BackText);
}
else
{
if(PagingMode==PagingModeType.PostBack)
{
if(ShowFirstLast)
{
ButtonNav.AppendFormat("
"
, this.UniqueID
, Page.GetPostBackEventReference(this,Convert.ToString(1))
, FirstText);
}
ButtonNav.AppendFormat("
"
, this.UniqueID
, Page.GetPostBackEventReference(this,Convert.ToString(currentPage-1))
, BackText);
}
else
{
if(ShowFirstLast)
{
ButtonNav.AppendFormat("
"
, UpdateQueryStringItem(Context.Request, QueryStringKey, Convert.ToString(1))
, FirstText);
}
ButtonNav.AppendFormat("
"
, UpdateQueryStringItem(Context.Request, QueryStringKey, Convert.ToString(currentPage-1))
, BackText);
}
}
return ButtonNav.ToString();
}
protected virtual string BuildButtonNavNext(int currentPage, int pageCount)
{
StringBuilder ButtonNav = new StringBuilder();
//Next Buttons
if(currentPage>=MaxPages || currentPage>= _PagedDataSet.Count|| Context==null)
{
ButtonNav.AppendFormat("
", NextText);
if(ShowFirstLast)
{
ButtonNav.AppendFormat("
", LastText);
}
}
else
{
if(PagingMode==PagingModeType.PostBack)
{
ButtonNav.AppendFormat("
"
, this.UniqueID
, Page.GetPostBackEventReference(this,Convert.ToString(currentPage+1))
, NextText);
if(ShowFirstLast)
{
ButtonNav.AppendFormat("
"
, this.UniqueID
, Page.GetPostBackEventReference(this,Convert.ToString(pageCount))
, LastText);
}
}
else
{
ButtonNav.AppendFormat("
"
, UpdateQueryStringItem(Context.Request, QueryStringKey, Convert.ToString(currentPage+1))
, NextText);
if(ShowFirstLast)
{
ButtonNav.AppendFormat("
"
, UpdateQueryStringItem(Context.Request, QueryStringKey, Convert.ToString(pageCount))
, LastText);
}
}
}
return ButtonNav.ToString();
}
#endregion
#region Build Results
public virtual string BuildResults(string resultsFormat)
{
if(PageCount==0 || Context==null)
{
if(ResultsLocation != ResultsLocationType.None)
{
return string.Format(resultsFormat, "1", PageSize.ToString(), (MaxPages*PageSize).ToString());
}
}
else if(ResultsLocation != ResultsLocationType.None)
{
return string.Format(resultsFormat
, RecordStart
, RecordEnd
, TotalRecords);
}
return "";
}
#endregion
//Methods (Public)
#region Utility: UpdateQueryStringItem and IsNumeric
//This method takes in a HttpRequest, QueryString Key, and new QueryStringValue.
//What it does is replaces the value of a specific QueryString key if it exists... if it
//does not exist then it adds it. It also keeps preserves of the other Querystring values.
static public string UpdateQueryStringItem(System.Web.HttpRequest httpRequest, string queryStringKey, string newQueryStringValue)
{
string NewURL = httpRequest.RawUrl;
//QueryString CONTAINS the Key...
if(httpRequest.QueryString[queryStringKey]!=null)
{
string OrignalSet = String.Format("{0}={1}", queryStringKey, httpRequest.QueryString[queryStringKey]);
string NewSet = String.Format("{0}={1}", queryStringKey, newQueryStringValue);
//REMOVE the key/value completely since the NewValue is blank
if(newQueryStringValue.Trim()=="")
{
//Replace Key/Value down the line...
NewURL = Regex.Replace(NewURL, "&"+OrignalSet, "", RegexOptions.IgnoreCase);
//Replace Key/Value at the beginning When there is other
//key/values after...
NewURL = Regex.Replace(NewURL, "?"+OrignalSet+"&", "?", RegexOptions.IgnoreCase);
//Replace Key/Value at the beginning when there
//are NO other Key/Values.
NewURL = Regex.Replace(NewURL, "?"+OrignalSet, "", RegexOptions.IgnoreCase);
}
//REPLACE old value with new value.
else
{
NewURL = Regex.Replace(NewURL, OrignalSet, NewSet, RegexOptions.IgnoreCase);
}
}
//Only add the key/value IF the new value is not blank.
else if(newQueryStringValue.Trim()!="")
{
//QueryString DOES NOT CONTAIN the Key... and DOES NOT HAVE other key/value pairs.
if(httpRequest.QueryString.Count==0)
{
NewURL += string.Format("?{0}={1}", queryStringKey, newQueryStringValue);
}
//QueryString DOES NOT CONTAIN the Key... and HAS other key/value pairs.
else
{
NewURL += string.Format("&{0}={1}", queryStringKey, newQueryStringValue);
}
}
return NewURL;
}
// This method returns a true if the passed in string contains only alphanumeric characters
public static bool IsNumeric(string Text)
{
if (Text == "" || Text == null)
{
return false;
}
Text = Text.Trim();
bool bResult = Regex.IsMatch(Text,@"^\d+$");
return bResult;
}
#endregion
#region Handle PostBacks
// Defines the Click event.
public event EventHandler Click;
// Invokes delegates registered with the Click event.
protected virtual void OnClick(EventArgs e)
{
if (Click != null)
{
Click(this, e);
}
}
// Method of IPostBackEventHandler that raises change events.
//
public virtual void RaisePostBackEvent(string eventArgument)
{
if(IsNumeric(eventArgument))
{
ChangePage(int.Parse(eventArgument));
}
OnClick(new EventArgs());
}
#endregion
}
}