控件代码:


















/// <summary>
///名称:SmartPager
///版本:2.0
///作者:小青青
///CopyRight:2006 请勿用作商业用途
/// </summary>
[DefaultEvent("PageIndexChanged"), ToolboxData("<{0}:SmartPager runat=server></{0}:SmartPager>")]
public class SmartPager : System.Web.UI.WebControls.WebControl, INamingContainer

...{
TextBox txtNewPageNumber;
LinkButton lnkPrev;
LinkButton lnkNext;
LinkButton lnkFirst;
LinkButton lnkLast;
LinkButton lnkGo;
Label lblCurrentPage;
public delegate void PageChangedEventHandler(Object source, PageChangedEventArgs e);
public event PageChangedEventHandler PageIndexChanged;
private int _PageSize;
private int _CurrentPageIndex;
private int _VirtualItemCount;

public SmartPager()
: base(HtmlTextWriterTag.Div)

...{ }

protected override void OnInit(EventArgs e)

...{

txtNewPageNumber = new TextBox();
lnkPrev = new LinkButton();
lnkNext = new LinkButton();
lnkFirst = new LinkButton();
lnkLast = new LinkButton();
lnkGo = new LinkButton();
lblCurrentPage = new Label();
EnsureChildControls();

}
protected override void CreateChildControls()

...{

this.Controls.Add(lnkFirst);
this.Controls.Add(lnkPrev);
this.Controls.Add(lblCurrentPage);
this.Controls.Add(txtNewPageNumber);
this.Controls.Add(lnkGo);
this.Controls.Add(lnkNext);
this.Controls.Add(lnkLast);


txtNewPageNumber.Width = 20;

lnkFirst.Attributes.Add("title", "首页");
lnkPrev.Attributes.Add("title", "上一页");
lnkNext.Attributes.Add("title", "下一页");
lnkLast.Attributes.Add("title", "末页");
lnkGo.Attributes.Add("title", "转到");

lnkFirst.Font.Name = "Webdings";
lnkPrev.Font.Name = "Webdings";
lnkNext.Font.Name = "Webdings";
lnkLast.Font.Name = "Webdings";
lnkGo.Font.Name = "Webdings";

lnkPrev.Text = "7";
lnkFirst.Text = "9";
lnkNext.Text = "8";
lnkLast.Text = ":";
lnkGo.Text = "4";


lnkGo.Click += new EventHandler(lnkGo_Click);
lnkPrev.Click += new EventHandler(lnkPrev_Click);
lnkNext.Click += new EventHandler(lnkNext_Click);
lnkFirst.Click += new EventHandler(lnkFirst_Click);
lnkLast.Click += new EventHandler(lnkLast_Click);

base.CreateChildControls();


}
[Browsable(false)]

public int PageCount

...{

get

...{

try

...{

if (VirtualItemCount % PageSize > 0)

...{

return VirtualItemCount / PageSize + 1;

}
else

...{

return VirtualItemCount / PageSize;

}
}
catch

...{
return 0;
}
}


}
public void SetPage(int pageIndex)

...{

CurrentPageIndex = pageIndex;

if (pageIndex > PageCount || pageIndex < 0)

return;

else

...{

OnPageIndexChanged(null, new PageChangedEventArgs(null, pageIndex));

}
}
public void SetPage(int pageIndex, int pageSize, int virtualItemCount)

...{

_CurrentPageIndex = pageIndex;

_PageSize = pageSize;

_VirtualItemCount = virtualItemCount;

if (pageIndex > PageCount || pageIndex < 0)

return;

else

...{

OnPageIndexChanged(null, new PageChangedEventArgs(null, pageIndex));


}
}
[Browsable(false)]
public int PageSize

...{

get

...{

return _PageSize;

}
set

...{


_PageSize = value;
ViewState.SetItemDirty("PageSize", true);


}

}
[Browsable(false)]
public int CurrentPageIndex

...{

get

...{

return _CurrentPageIndex;

}
set

...{


_CurrentPageIndex = value;
ViewState.SetItemDirty("CurrentPageIndex", true);



}

}
[Browsable(false)]
public int VirtualItemCount

...{

get

...{

return _VirtualItemCount;

}
set

...{


_VirtualItemCount = value;
ViewState.SetItemDirty("VirtualItemCount", true);


}

}

private void lnkGo_Click(object sender, EventArgs e)

...{

int newPage;

try

...{
newPage = int.Parse(txtNewPageNumber.Text.Trim()) - 1;
}
catch

...{

return;

}

if (PageCount > newPage && PageCount != 0)
OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));

}

public virtual void OnPageIndexChanged(object source, PageChangedEventArgs e)

...{

DateTime start = DateTime.Now;

if (e.NewPageIndex > PageCount || e.NewPageIndex < 0)

return;

else

...{

CurrentPageIndex = e.NewPageIndex;

if (PageIndexChanged != null)

...{

PageIndexChanged(source, e);


}

DateTime end = DateTime.Now;

lblCurrentPage.Text = String.Format("(当前在第<B> {0} </B>页 共<B> {1} </B>页 记录数<B> {2} </B>条 [搜索用时 {3}秒])", (CurrentPageIndex + 1), PageCount, VirtualItemCount, (end - start).TotalSeconds);

txtNewPageNumber.Text = (CurrentPageIndex + 1).ToString();


}

}

private void lnkPrev_Click(object sender, EventArgs e)

...{

int newPage;

newPage = CurrentPageIndex - 1;
if (newPage >= 0 && PageCount != 0)
OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));

}
private void lnkFirst_Click(object sender, EventArgs e)

...{

int newPage;

newPage = 0;
if (newPage >= 0 && PageCount != 0)
OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));

}
private void lnkLast_Click(object sender, EventArgs e)

...{

int newPage;

newPage = PageCount - 1;
if (PageCount > newPage && PageCount != 0)
OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));

}

private void lnkNext_Click(object sender, EventArgs e)

...{

int newPage;

newPage = CurrentPageIndex + 1;
if (PageCount > newPage && PageCount != 0)
OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));

}


protected override object SaveViewState()

...{
// Check whether the PageSize property exists in
// the ViewState property, and if it does, check
// whether it has changed since the most recent
// TrackViewState method call.
if (!((IDictionary)ViewState).Contains("PageSize") || ViewState.IsItemDirty("PageSize"))

...{
ViewState.Remove("PageSize");
// Add the _PageSize property to the StateBag.
ViewState.Add("PageSize", _PageSize);
}
if (!((IDictionary)ViewState).Contains("CurrentPageIndex") || ViewState.IsItemDirty("CurrentPageIndex"))

...{
ViewState.Remove("CurrentPageIndex");
// Add the _CurrentPageIndex property to the StateBag.
ViewState.Add("CurrentPageIndex", _CurrentPageIndex);
}
if (!((IDictionary)ViewState).Contains("VirtualItemCount") || ViewState.IsItemDirty("VirtualItemCount"))

...{
ViewState.Remove("VirtualItemCount");
// Add the _VirtualItemCount property to the StateBag.
ViewState.Add("VirtualItemCount", _VirtualItemCount);
}
return ((IStateManager)ViewState).SaveViewState();
}
protected override void LoadViewState(object savedState)

...{
if (savedState != null)
((IStateManager)ViewState).LoadViewState(savedState);
if (ViewState["CurrentPageIndex"] != null)
_CurrentPageIndex = int.Parse(ViewState["CurrentPageIndex"].ToString());
if (ViewState["PageSize"] != null)
_PageSize = int.Parse(ViewState["PageSize"].ToString());
if (ViewState["VirtualItemCount"] != null)
_VirtualItemCount = int.Parse(ViewState["VirtualItemCount"].ToString());

}

public class PageChangedEventArgs : EventArgs

...{
// Fields
private object commandSource;
private int newPageIndex;

public PageChangedEventArgs(object commandSource, int newPageIndex)

...{
this.commandSource = commandSource;
this.newPageIndex = newPageIndex;
}
// Properties
public object CommandSource

...{
get

...{
return this.commandSource;
}
}
public int NewPageIndex

...{
get

...{
return this.newPageIndex;
}
}
}

}

}















































































































































































































































































































































































































































- 通过后台,使用SmartPager转向页面






- 订阅事件PageIndexChanged














http://blog.youkuaiyun.com/justinalucard/archive/2006/12/22/1453194.aspx
转载请注明本贴地址及作者!!