This is a very very good control . I have modified few things to make it complete.
1. Fixed ajax issue.
2. Provide an option to select page size.
Here is the modified version
User control code --
WebPager.cs
#region using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Web;
#endregion
namespace AspNet.CustomControl
{
[ToolboxData("<{0}:WebPager runat=\"server\"></{0}:WebPager>")]
[ToolboxBitmap(typeof(resfinder), "AspNet.CustomControl.WebPager.WebPager.bmp")]
public class WebPager : WebControl, IPostBackEventHandler, INamingContainer
{
string _CssClass = "PagerContainerTable";
#region protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Page.RegisterRequiresControlState(this);
if (!this.CssClass.IsNullOrEmpty())
{
_CssClass = this.CssClass;
base.CssClass = "";
}
else
{
EmbedCss(this.Theme.ToString() + ".css");
}
}
private void EmbedCss(string Resourcename)
{
if (Page.Header.FindControl("WebPagerStyle") == null)
{
LiteralControl css = new LiteralControl("<link href=\"" + this.GetResourceUrl("WebPager.WebPager" + Resourcename) + "\" type=\"text/css\" rel=\"stylesheet\" />");
css.ID = "WebPagerStyle";
Page.Header.Controls.Add(css);
}
}
protected override object SaveControlState()
{
object[] objState = new object[2];
objState[0] = CurrentIndex;
objState[1] = PageSize;
return objState;
}
protected override void LoadControlState(object state)
{
object[] savedState = (object[])state;
CurrentIndex = (int)savedState[0];
PageSize = (int)savedState[1];
}
#endregion
#region private static readonly object EventCommand = new object();
public delegate void PageSizeChangeHandler(object sender, PageSizeChangeEventArgs pageSizeChangeEventArgs);
public event PageSizeChangeHandler PageSizeChange;
public event CommandEventHandler Command
{
add { Events.AddHandler(EventCommand, value); }
remove { Events.RemoveHandler(EventCommand, value); }
}
protected virtual void OnCommand(CommandEventArgs e)
{
CommandEventHandler clickHandler = (CommandEventHandler)Events[EventCommand];
if (clickHandler != null) clickHandler(this, e);
}
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
#region if (eventArgument.Contains("PageSize##"))
{
int newPageSize = this.PageSize;
int.TryParse(eventArgument.Substring(eventArgument.LastIndexOf("##") + 2), out newPageSize);
this.CurrentIndex = 1;
if (PageSizeChange != null)
{
PageSizeChange(this, new PageSizeChangeEventArgs { CurrentPageSize = this.PageSize, NewPageSize = newPageSize });
}
this.PageSize = newPageSize;
}
#endregion
else
OnCommand(new CommandEventArgs(this.UniqueID, Convert.ToInt32(eventArgument)));
}
#endregion
#region
[Category("Globalization")]
public string LastClause
{
get { return _LAST; }
set { _LAST = value; }
}
[Category("Globalization")]
public string NextClause
{
get { return _next; }
set { _next = value; }
}
Event class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace AspNet.CustomControl
{
public class PageSizeChangeEventArgs:EventArgs
{
public int CurrentPageSize { set; get; }
public int NewPageSize { set; get; }
}
}
Modify AssemblyInfo.cs
[assembly: WebResource("AspNet.CustomControl.Resources.WebPager.arr_left.gif", "image/gif")]
[assembly: WebResource("AspNet.CustomControl.Resources.WebPager.arr_right.gif", "image/gif")]
[assembly: WebResource("AspNet.CustomControl.Resources.WebPager.WebPagerDark.css", "text/css")]
[assembly: WebResource("AspNet.CustomControl.Resources.WebPager.WebPagerLight.css", "text/css")]
Extensions class
internal static class Extensions
{
public static string GetResourceUrl(this Control container, string ResourceName)
{
return container.Page.ClientScript.GetWebResourceUrl(container.GetType(), ("AspNet.CustomControl.Resources." + ResourceName)).Replace("&", "&");
}
}
Create a folder structure in the application
Resources --> WebPager
create two css WebPagerLight.css and WebPagerDark.css also place arr_left.gif & arr_right.gif filein the WebPager folder.
WebPagerLight.css content
.PagerContainerTable { border-right: #333333 1px solid; border-top: #333333 1px solid; border-left: #333333 1px solid; color: #d1d1e1; border-bottom: #333333 1px solid; background-color: #FFFFFF; } .PagerContainerTable .PagerInfoCell { padding-right: 6px; padding-left: 6px; padding-bottom: 3px; font: bold 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; color: #f0f1f2; padding-top: 3px; white-space: nowrap; background-color: #990000; font-weight:normal; } .PagerContainerTable .PagerInfoCell:link { color: #ffcc66; text-decoration: none; } .PagerContainerTable .PagerInfoCell:visited { color: #ffcc66; text-decoration: none; } .PagerContainerTable .PagerCurrentPageCell { color: #990000; background-color: #FFFF99; cursor:default; } .PagerContainerTable .PagerOtherPageCells { background-color: #f0f1f2; } .PagerContainerTable .PagerSSCCells { background-color: #cccccc; } .PagerContainerTable .PagerHyperlinkStyle { font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .PagerHyperlinkStyle:hover { color: #000000; text-decoration: none; font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .PagerHyperlinkStyle:link { color: #000000; text-decoration: none; font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .PagerHyperlinkStyle:visited { color: #000000; text-decoration: none; font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .PagerHyperlinkStyle:active { color: #000000; text-decoration: none; font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .GoToLabel { font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; color:#333333; cursor:pointer; font-size:65%; vertical-align:middle; display:inline; } .PagerContainerTable .GoToSelect { font-size:55%; } .PagerContainerTable .GoToSelectedOption { color:#f9f9f9; background-color:#666666; } .PagerContainerTable .GoToArrow { vertical-align:middle; cursor:pointer; } .PageSizeSelect{font-size:10px;}
WebPagerDark.css content
.PagerContainerTable { border-right: #333333 1px solid; border-top: #333333 1px solid; border-left: #333333 1px solid; color: #d1d1e1; border-bottom: #333333 1px solid; background-color: #000000; } .PagerContainerTable .PagerInfoCell { padding-right: 6px; padding-left: 6px; padding-bottom: 3px; font: bold 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; color: #ffcc66; padding-top: 3px; white-space: nowrap; background-color: #001b52; font-weight:normal; } .PagerContainerTable .PagerInfoCell:link { color: #ffcc66; text-decoration: none; } .PagerContainerTable .PagerInfoCell:visited { color: #ffcc66; text-decoration: none; } .PagerContainerTable .PagerCurrentPageCell { color: #ffffff; background-color: #333333; } .PagerContainerTable .PagerOtherPageCells { color: #ffffff; background-color: #222222; } .PagerContainerTable .PagerSSCCells { background-color: #444444; } .PagerContainerTable .PagerHyperlinkStyle { font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .PagerHyperlinkStyle:hover { color: #ffcc66; text-decoration: none; font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .PagerHyperlinkStyle:link { color: #ffcc66; text-decoration: none; font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .PagerHyperlinkStyle:visited { color: #ffcc66; text-decoration: none; font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .PagerHyperlinkStyle:active { color: #ffcc66; text-decoration: none; font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; } .PagerContainerTable .GoToLabel { font: 11px arial, verdana, geneva, lucida, 'lucida grande' , arial, helvetica, sans-serif; color:#f9f9f9; cursor:pointer; font-size:65%; vertical-align:middle; display:inline; } .PagerContainerTable .GoToSelect { font-size:55%; } .PagerContainerTable .GoToSelectedOption { color:#f9f9f9; background-color:#666666; } .PagerContainerTable .GoToArrow { vertical-align:middle; cursor:pointer; } .PageSizeSelect{font-size:10px;}
Dont foget to add allthose css and image file as embaded resources.
Finally build the Application
Apply the control in asp.net page
<mom:WebPager ID="pager1" runat="server" EnableViewState="false" Theme="Light" OnCommand="pager_Command" önpagesizechange="WebPager1_PageSizeChange"
GenerateFirstLastSection="True" GenerateGoToSection="True" GenerateHiddenHyperlinks="False" ShowPageSizeSelection="true" />
code behind
public void pager_Command(object sender, CommandEventArgs e)
{
int currnetPageIndx = Convert.ToInt32(e.CommandArgument);
pager1.CurrentIndex = currnetPageIndx;
BindRepeater();
}
protected void WebPager1_PageSizeChange(object sender, MomentumInfotech.CustomControl.PageSizeChangeEventArgs pageSizeChangeEventArgs)
{
lblNewPageSize.Text = "NewPageSize - " + pageSizeChangeEventArgs.NewPageSize + " , CurrentPageSize" + pageSizeChangeEventArgs.CurrentPageSize;
pager1.PageSize = pageSizeChangeEventArgs.NewPageSize;
BindRepeater();
}
For live preview please visit
http://www.justpunjab.com/BusinessSearchResult.aspx
Thank you.
Sumanta Chatterjee
|