继承页面的控件?急(我只有50分。全给)VS2003
在BaseListPage.cs页面中(注:他没有对应的.aspx页面)
public class BaseListPage : protected System.Web.UI.WebControls.LinkButton btnFirst;
protected System.Web.UI.WebControls.LinkButton btnPrev;
protected System.Web.UI.WebControls.LinkButton btnNext;
protected System.Web.UI.WebControls.LinkButton btnLast;
protected System.Web.UI.WebControls.DropDownList drPage;
protected System.Web.UI.WebControls.Label lblSort; // field
protected System.Web.UI.WebControls.Label lblSortBy; // ASC/DESC
protected void SetPageStatus( int currPage, int totalPage )
{
if ( totalPage <= 1 )
{
this.btnFirst.Enabled = false;
this.btnPrev.Enabled = false;
this.btnNext.Enabled = false;
this.btnLast.Enabled = false;
}
else
{
if ( currPage == 1 )
{
this.btnFirst.Enabled = false;
this.btnPrev.Enabled = false;
this.btnNext.Enabled = true;
this.btnLast.Enabled = true;
}
else if ( currPage == totalPage )
{
this.btnFirst.Enabled = true;
this.btnPrev.Enabled = true;
this.btnNext.Enabled = false;
this.btnLast.Enabled = false;
}
else
{
this.btnFirst.Enabled = true;
this.btnPrev.Enabled = true;
this.btnNext.Enabled = true;
this.btnLast.Enabled = true;
}
}
}
private void PagerButtonClick( int actionQueryType )
{
currPage = StringUtil.InputInt( drPage.SelectedValue );
switch ( actionQueryType )
{
case ACTION_QUERY_NEW :
currPage = 1;
break;
case ACTION_QUERY_FIRST :
currPage = 1;
break;
case ACTION_QUERY_PREV :
currPage--;
break;
case ACTION_QUERY_NEXT :
currPage++;
break;
case ACTION_QUERY_LAST :
currPage = drPage.Items.Count;
break;
case ACTION_QUERY_CHANGE :
break;
case ACTION_QUERY_SORT :
break;
}
if ( actionQueryType != ACTION_QUERY_SORT )
{
sortBy = StringUtil.InputText( lblSortBy.Text );
sort = StringUtil.InputText( lblSort.Text );
}
if ( currPage < 1 )
{
currPage = 1;
}
Query();
}
protected void drPage_SelectedIndexChanged(object sender, System.EventArgs e)
{
PagerButtonClick( ACTION_QUERY_CHANGE );
}
protected void btnFirst_Click(object sender, System.EventArgs e)
{
PagerButtonClick( ACTION_QUERY_FIRST );
}
protected void btnPrev_Click(object sender, System.EventArgs e)
{
PagerButtonClick( ACTION_QUERY_PREV );
}
protected void btnNext_Click(object sender, System.EventArgs e)
{
PagerButtonClick( ACTION_QUERY_NEXT );
}
protected void btnLast_Click(object sender, System.EventArgs e)
{
PagerButtonClick( ACTION_QUERY_LAST );
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
protected void InitializeComponent()
{
//add the instantiation by sandy
this.btnFirst = new System.Web.UI.WebControls.LinkButton();
this.btnPrev = new System.Web.UI.WebControls.LinkButton();
this.btnNext = new System.Web.UI.WebControls.LinkButton();
this.btnLast = new System.Web.UI.WebControls.LinkButton();
this.drPage = new System.Web.UI.WebControls.DropDownList();
this.lblSort=new System.Web.UI.WebControls.Label();
this.lblSortBy=new System.Web.UI.WebControls.Label();
this.btnFirst.Click += new System.EventHandler(this.btnFirst_Click);
this.btnPrev.Click += new System.EventHandler(this.btnPrev_Click);
this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
this.btnLast.Click += new System.EventHandler(this.btnLast_Click);
this.drPage.SelectedIndexChanged += new System.EventHandler(this.drPage_SelectedIndexChanged);
}
#endregion
在EventManage.aspx.cs页面中,这个页面有对应的EventManage.aspx页面
public class EventManage : BaseListPage
{
protected System.Web.UI.WebControls.Label lblSort;//与父类的lblSort同名,VS2003提醒我使用NEW
protected System.Web.UI.WebControls.Label lblSortBy;
protected System.Web.UI.WebControls.LinkButton btnFirst;
protected System.Web.UI.WebControls.LinkButton btnPrev;
protected System.Web.UI.WebControls.LinkButton btnNext;
protected System.Web.UI.WebControls.LinkButton btnLast;
protected System.Web.UI.WebControls.DropDownList drPage;
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.dataGrid.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.dataGrid_SortCommand);
this.dataGrid.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dataGrid_ItemDataBound);
this.lnkReflesh.Click += new System.EventHandler(this.lnkReflesh_Click);
this.btnFirst.Click += new System.EventHandler(this.btnFirst_Click);
this.btnPrev.Click += new System.EventHandler(this.btnPrev_Click);
this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
this.btnLast.Click += new System.EventHandler(this.btnLast_Click);
this.drPage.SelectedIndexChanged += new System.EventHandler(this.drPage_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
我跟踪到this.btnFirst_Click,没错,因为在子类里没有btnFirst_Click函数。它调用了父类的btnFirst_Click函数,然而我发现在父类里的btnFirst控件还是父类的,不是子类的,因此SetPageStatus()一点用都没有,对针对父类的。而父类的显示不出来。做了等于白做。我
只知道这样的办法一定是可行。但我不知道错在哪里。请各位指教!!!
问题点数:50、回复次数:20Top
1 楼sunchaohuang(流星飞狐(oO!))回复于 2006-05-02 13:57:50 得分 0
????????????????说的不够清楚Top
2 楼flyzq()回复于 2006-05-02 14:08:51 得分 5
说说我的想法,可以在BaseListPage试试添加一个含参数构造函数,参数为那些控件,在EventManage调用BaseListPage的构造函数进行初试化Top
3 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-02 15:02:44 得分 0
我去掉子类的那个控件定义,。或者再加上New都不行Top
4 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-02 16:50:28 得分 0
Please Help UpTop
5 楼xinke_li(科科)回复于 2006-05-02 17:37:03 得分 0
我的天,看着都费劲,也用中文说一说讲的什么意思嘛。Top
6 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-02 17:53:47 得分 0
基类提供一个基本的分页功能Top
7 楼power12928266()回复于 2006-05-03 20:16:33 得分 0
路过!!帮凯哥顶一下Top
8 楼zhujiechang(小朱)回复于 2006-05-03 21:30:25 得分 0
:后面的东西写错了Top
9 楼jeremychen001181(Τιτάνες)回复于 2006-05-03 21:31:35 得分 10
修改子类中InitializeComponent的代码如下:
举个btnFirst的例子:
private void InitializeComponent()
{
this.btnFirst.Click += new System.EventHandler(base.btnFirst_Click);
}Top
10 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-06 15:00:11 得分 0
后面的东西写错了??????
哪里写错了拉。。。Top
11 楼jeremychen001181(Τιτάνες)回复于 2006-05-06 18:27:18 得分 0
this.lnkReflesh.Click += new System.EventHandler(this.lnkReflesh_Click);
this.btnFirst.Click += new System.EventHandler(this.btnFirst_Click);
this.btnPrev.Click += new System.EventHandler(this.btnPrev_Click);
this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
应该调用基类的btnFirst_Click,不是吗?
改为this.btnFirst.Click += new System.EventHandler(base.btnFirst_Click);
试试Top
12 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-07 14:02:40 得分 0
是的啊。。。没有错啊。。我跟踪进去,都是调用了base中的btnFirst_Click事件。我在子类里的根本没有这个事件处理函数。错不在这里。错在base基类的btnFirst_Click事件处理的是父类的控件,它应该处理子类里的控件。。
现在的问题转换为父类中如何引用子类中的同名控件Top
13 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-08 14:27:51 得分 0
UPTop
14 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-09 13:00:18 得分 0
UP!!!!Top
15 楼flamelp(翔天)回复于 2006-05-09 13:53:27 得分 5
控件好象不能继承,不知道那位高手也许可以。
你可以把this.btnFirst_Click写成父类的方法,在子类的事件中调用这样方法就可以了Top
16 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-09 23:05:11 得分 0
this.btnFirst_Click写成父类的方法.这个已经是做好了.现在关键是现在的问题转换为父类中如何引用子类中的同名控件
Top
17 楼jeremychen001181(Τιτάνες)回复于 2006-05-10 04:37:45 得分 0
如果你在父类的this.btnFirst_Click里
输入Response.Write( ((LinkButton)sender).Text );
按你的说法,输出的是父类的BUTTON的TEXT吗?你父类不是没有前台页面的吗Top
18 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-10 22:20:18 得分 0
对啊..没有前台页面的Top
19 楼shankaipingo(我死了,在烈火中我又站起来了,你猜是涅盘,还是尸变)回复于 2006-05-10 22:21:48 得分 0
但是你设断点去看的话.发现LinkButton. Text还是基类的.可见他还是用基类的控件Top
20 楼jeremychen001181(Τιτάνες)回复于 2006-05-11 01:36:26 得分 30
怪事,我输出的TEXT就是子类的BUTTON。
父类:
public class BaseListPage : System.Web.UI.Page
{
protected System.Web.UI.WebControls.LinkButton btnFirst;
private void PagerButtonClick( string actionQueryType )
{
Response.Write( actionQueryType );
}
protected void btnFirst_Click(object sender, system.EventArgs e)
{
string s = ((System.Web.UI.WebControls.LinkButton)sender).Text;
PagerButtonClick( s );
}
/*...*/
protected void InitializeComponent()
{
//add the instantiation by sandy
this.btnFirst = new System.Web.UI.WebControls.LinkButton();
this.btnFirst.Click += new System.EventHandler(this.btnFirst_Click);
}
}
子类:
public class WebForm1 : BaseListPage
{
protected System.Web.UI.WebControls.LinkButton btnFirst;
/*...*/
private void InitializeComponent()
{
this.btnFirst.Click += new System.EventHandler(this.btnFirst_Click);
this.Load += new System.EventHandler(this.Page_Load);
}Top




