play with:1.PageControl.cs (compile it into WebControlLibrary1.dll and copy it to the bin subdirectory or use the toolbox):using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;namespace WebControlLibrary1
{
[ToolboxData("<{0}:PageControl runat=server></{0}:PageControl>")]
public class PageControl : System.Web.UI.Control, INamingContainer
{
Label mlbl;
Table mtbl;
int mPageCount;
LinkButton[] mbuttons; public int PageSize
{
get
{
object o = ViewState["PageSize"];
if (o == null)
return 1;
else
return (int)o;
}
set
{
ViewState["PageSize"] = value;
}
} public int CurrentPage
{
get
{
object o = ViewState["CurrentPage"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["CurrentPage"] = value;
}
} public int TotalCount
{
get
{
object o = ViewState["TotalCount"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["TotalCount"] = value;
}
} protected override void CreateChildControls()
{
//create a header
mlbl = new Label();
Controls.Add(mlbl); //create a container:
mtbl = new Table();
Controls.Add(mtbl); //determine number of pages
mPageCount = TotalCount /PageSize;
if ( mPageCount * PageSize < TotalCount)
mPageCount++;
//create buttons
mbuttons = new LinkButton[mPageCount]; for (int i=0; i < mPageCount; i++)
{
mbuttons[i] = new LinkButton();
mbuttons[i].Text = (i+1).ToString();
mbuttons[i].ID = "LB" + (i+1).ToString();
mbuttons[i].Click += new EventHandler(LinkButtonClick);
Controls.Add(mbuttons[i]);
Controls.Add(new LiteralControl(" "));
}
} void LinkButtonClick(Object sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
CurrentPage = Convert.ToInt32(lb.Text) - 1;
} protected override void OnPreRender(EventArgs e)
{
base.OnPreRender (e); mlbl.Text = "Page " + (CurrentPage+1).ToString();
int nStart = CurrentPage * PageSize;
int nEnd = (CurrentPage + 1)* PageSize ;
if (nEnd >TotalCount)
nEnd = TotalCount; mtbl.Rows.Clear();
mtbl.GridLines = GridLines.Both;
for (int i=nStart; i < nEnd; i++)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
tc.Text = i.ToString();
tr.Cells.Add(tc);
mtbl.Rows.Add(tr);
} for (int i= 0 ; i < mbuttons.Length; i++)
if (CurrentPage == i)
mbuttons[i].Enabled = false;
else
mbuttons[i].Enabled = true;
}
}
}
2. WebForm.aspx:
<%@ Register TagPrefix="cc1" Namespace="WebControlLibrary1" Assembly="WebControlLibrary1" %>
<form id="Form1" method="post" runat="server">
<cc1:PageControl id=PageControl1 runat="server" TotalCount="22" PageSize="4"></cc1:PageControl>
</form>
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;namespace WebControlLibrary1
{
[ToolboxData("<{0}:PageControl runat=server></{0}:PageControl>")]
public class PageControl : System.Web.UI.Control, INamingContainer
{
Label mlbl;
Table mtbl;
int mPageCount;
LinkButton[] mbuttons; public int PageSize
{
get
{
object o = ViewState["PageSize"];
if (o == null)
return 1;
else
return (int)o;
}
set
{
ViewState["PageSize"] = value;
}
} public int CurrentPage
{
get
{
object o = ViewState["CurrentPage"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["CurrentPage"] = value;
}
} public int TotalCount
{
get
{
object o = ViewState["TotalCount"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["TotalCount"] = value;
}
} protected override void CreateChildControls()
{
//create a header
mlbl = new Label();
Controls.Add(mlbl); //create a container:
mtbl = new Table();
Controls.Add(mtbl); //determine number of pages
mPageCount = TotalCount /PageSize;
if ( mPageCount * PageSize < TotalCount)
mPageCount++;
//create buttons
mbuttons = new LinkButton[mPageCount]; for (int i=0; i < mPageCount; i++)
{
mbuttons[i] = new LinkButton();
mbuttons[i].Text = (i+1).ToString();
mbuttons[i].ID = "LB" + (i+1).ToString();
mbuttons[i].Click += new EventHandler(LinkButtonClick);
Controls.Add(mbuttons[i]);
Controls.Add(new LiteralControl(" "));
}
} void LinkButtonClick(Object sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
CurrentPage = Convert.ToInt32(lb.Text) - 1;
} protected override void OnPreRender(EventArgs e)
{
base.OnPreRender (e); mlbl.Text = "Page " + (CurrentPage+1).ToString();
int nStart = CurrentPage * PageSize;
int nEnd = (CurrentPage + 1)* PageSize ;
if (nEnd >TotalCount)
nEnd = TotalCount; mtbl.Rows.Clear();
mtbl.GridLines = GridLines.Both;
for (int i=nStart; i < nEnd; i++)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
tc.Text = i.ToString();
tr.Cells.Add(tc);
mtbl.Rows.Add(tr);
} for (int i= 0 ; i < mbuttons.Length; i++)
if (CurrentPage == i)
mbuttons[i].Enabled = false;
else
mbuttons[i].Enabled = true;
}
}
}
2. WebForm.aspx:
<%@ Register TagPrefix="cc1" Namespace="WebControlLibrary1" Assembly="WebControlLibrary1" %>
<form id="Form1" method="post" runat="server">
<cc1:PageControl id=PageControl1 runat="server" TotalCount="22" PageSize="4"></cc1:PageControl>
</form>
解决方案 »
- 动态添加web用户控件的问题
- 关于Update语句错误的问题
- 在模板页中使用js的问题
- 做一个会员管理
- 谁能推荐一些实用的部门管理或企业管理软件?
- 如何在网页中局部刷新
- web页面(webform)中向ocx控件传参数问题 谢谢
- 初学ASP.NET,请问 无法找到脚本库"/aspnet_client/system_web/1_1_4322/webUIValidation.js".
- 怎样获得treeview 中已经选择的节点的text
- 这段代码谁知道哪里错了!给分50
- 关于RequiredFieldValidator控件的范围问题
- label显示只读界面,text显示编辑界面,把text设置为多行显示,然后把值读进数据库,再读出来赋值给label.text可是没有多行显示,怎么办
protected override void CreateChildControls() {
{
....
mbuttons = new LinkButton[mPageCount];
for (int i=0; i < mPageCount; i++)
{
...
} mbuttons[CurrentPage].Enabled=true;
}
protected override void OnPreRender(EventArgs e)
{ ...
//remove the loop, but use
mbuttons[CurrentPage].Enabled = false;
}
lbNextn.Click += new EventHandler(this.Next_nButtonClicked);
事件方法:
private void Next_nButtonClicked(Object sender, EventArgs e)
{
n=n+10;
}
结果在实际运行中,lbNextn点两次才有效,事件的创建和linkbutton的创建在一起,我不知道该如何解决该问题?
看ms-help://MS.netframeworksdk.chs/cpguidenf/html/cpconcompositionvsrendering.htm
什么变量?int类型的不是都可以作为i的初值吗?
如果是其他的类型,只要是集合,也可以用foreach()阿
LinkButton[] GoPage=new LinkButton[nTotalPage+2];
protected override void CreateChildControls()
{
for(int n=paranstart;n<=nEndPage;n++)
{
GoPage[n]=new LinkButton();
GoPage[n].Text="["+n.ToString()+"]";
GoPage[n].ID="GoPage"+n.ToString();
GoPage[n].Click+=new EventHandler(this.Gopageclicked);
nagcell.Controls.Add(GoPage[n]);
nagcell.Controls.Add(new LiteralControl(" "));
}
lbNextn = new LinkButton();
lbNextn.ID="Nextn"; lbNextn.Click += new EventHandler(this.Next_nButtonClicked);
nagcell.Controls.Add(lbNextn); nagcell.Controls.Add(new LiteralControl(" ")); private void Next_nButtonClicked(Object sender, EventArgs e)
{
paranstart=paranstart+10;
CurrentPageIndex=Parastartpage-1;
nStartcount=Parastartpage*PageSize;
}
}
bool IPostBackDataHandler.LoadPostData(string postDataKey,
NameValueCollection values) {
// UserInputName is defined in LoginUI.
_userName = values[UserNameInputName ]; // PasswordInputName is defined in LoginUI.
_password = values[PasswordInputName]; // Check whether the button was clicked on the
// client. If it was, tell the page to
// invoke IPostBackEventHandler.RaisePostBackEvent.
// ButtonName is defined in LoginUI.
string buttonValue = values[ButtonName];
bool buttonClicked =
(buttonValue != null) && (buttonValue.Length != 0);
if (buttonClicked) Page.RegisterRequiresRaiseEvent(this); // Return false because we do not want to raise a
// changed event.
return false;
} void IPostBackDataHandler.RaisePostDataChangedEvent() {
} void IPostBackEventHandler.RaisePostBackEvent(
string eventArgument) {
OnLogon(EventArgs.Empty);
} protected virtual void OnLogon(EventArgs e) {
EventHandler logonHandler =
(EventHandler)Events[EventLogon];
if (logonHandler != null) {
logonHandler(this, e);
}
} protected override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
Page.RegisterRequiresPostBack(this);
} protected override void Render(HtmlTextWriter writer) {
// Ensures that this control is nested in a server form.
if (Page != null) {
Page.VerifyRenderingInServerForm(this);
}
base.Render(writer);
}
}
}
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;namespace CustomControls
{ [ToolboxData("<{0}:MyPageControl runat=server></{0}:MyPageControl>")]
public class MyPageControl : System.Web.UI.Control, INamingContainer
{
const int nPagerCount = 10;
Label mlbl;
Table mtbl;
int mPageCount;
LinkButton btnPrev;
LinkButton btnNext;
LinkButton[] mbuttons; public int PageSize
{
get
{
object o = ViewState["PageSize"];
if (o == null)
return 1;
else
return (int)o;
}
set
{
ViewState["PageSize"] = value;
}
} public int CurrentPage
{
get
{
object o = ViewState["CurrentPage"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["CurrentPage"] = value;
}
} public int CurrentTab
{
get
{
object o = ViewState["CurrentTab"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["CurrentTab"] = value;
}
} public int TotalCount
{
get
{
object o = ViewState["TotalCount"];
if (o == null)
return 0;
else
return (int)o;
}
set
{
ViewState["TotalCount"] = value;
}
} protected override void CreateChildControls()
{
//create a header
mlbl = new Label();
Controls.Add(mlbl); //create a container:
mtbl = new Table();
Controls.Add(mtbl); //determine number of pages
mPageCount = TotalCount /PageSize;
if ( mPageCount * PageSize < TotalCount)
mPageCount++;
//create buttons
btnPrev = new LinkButton();
btnPrev.ID="PreTen";
btnPrev.Text = "Previous 10";
btnPrev.Click += new EventHandler(LinkButtonClick);
Controls.Add(btnPrev);
Controls.Add(new LiteralControl(" ")); mbuttons = new LinkButton[nPagerCount];
for (int i=0; i < nPagerCount; i++)
{
mbuttons[i] = new LinkButton();
//mbuttons[i].Text = (i+1).ToString();
mbuttons[i].ID = "LB" + (i+1).ToString();
mbuttons[i].Click += new EventHandler(LinkButtonClick);
Controls.Add(mbuttons[i]);
Controls.Add(new LiteralControl(" "));
} btnNext = new LinkButton();
btnNext.ID="NextTen";
btnNext.Text = "Next 10";
btnNext.Click += new EventHandler(LinkButtonClick);
Controls.Add(btnNext);
Controls.Add(new LiteralControl(" "));
} void LinkButtonClick(Object sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
if (lb.ID.EndsWith("Ten"))
{
if (lb.ID.StartsWith("Pre"))
{
CurrentTab--;
if (CurrentTab < 0)
CurrentTab = 0;
}
else
{
CurrentTab++;
if (CurrentTab * nPagerCount > mPageCount)
CurrentTab = mPageCount/nPagerCount;
} CurrentPage = CurrentTab * nPagerCount;
}
else
CurrentPage = Convert.ToInt32(lb.Text) - 1;
} protected override void OnPreRender(EventArgs e)
{
base.OnPreRender (e); mlbl.Text = "Page " + (CurrentPage+1).ToString();
int nStart = CurrentPage * PageSize;
int nEnd = (CurrentPage + 1)* PageSize ;
if (nEnd >TotalCount)
nEnd = TotalCount; mtbl.Rows.Clear();
mtbl.GridLines = GridLines.Both;
for (int i=nStart; i < nEnd; i++)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
tc.Text = i.ToString();
tr.Cells.Add(tc);
mtbl.Rows.Add(tr);
} btnPrev.Visible = CurrentTab != 0; for (int i= 0 ; i < nPagerCount; i++)
{
int nPageNumber = CurrentTab*nPagerCount + i+1;
mbuttons[i].Text = nPageNumber.ToString();
mbuttons[i].Enabled = CurrentPage % nPagerCount != i;
mbuttons[i].Visible = nPageNumber <= mPageCount; } btnNext.Visible = (CurrentTab +1) * nPagerCount < mPageCount;
} }
}
for (int i=0; i < nPagerCount; i++)
{
mbuttons[i] = new LinkButton();
//mbuttons[i].Text = (i+1).ToString();
mbuttons[i].ID = "LB" + (i+1).ToString();
mbuttons[i].Click += new EventHandler(LinkButtonClick);
Controls.Add(mbuttons[i]);
Controls.Add(new LiteralControl(" "));
}
for (int i=startcount; i < nPagerCount; i++)
{
mbuttons[i] = new LinkButton();
//mbuttons[i].Text = (i+1).ToString();
mbuttons[i].ID = "LB" + (i+1).ToString();
mbuttons[i].Click += new EventHandler(LinkButtonClick);
Controls.Add(mbuttons[i]);
Controls.Add(new LiteralControl(" "));
}这个变量是用另一个事件控制,比如我点击按钮“下10页”,startcount=10,则linkbutton数组从mbuttons[10]开始!