asp.net 2复合控件

     目前,正在做一个asp.net 2.0项目,其中使用了复合控件。

     在一个页面上放置了GridView控件用于显示多条数据的摘要信息,同时,放置了若干小控件(包括复合控件)来显示详细资料,GridView控件中有Command字段“详细”来处理。(也可以分为两个页面布局,图省事,放在一起了,:>)。在使用过程中发现一个奇怪的现象:第一次点“详细”时,一切正常显示;后面的数据涉及到复合控件的信息就不能正常显示了。经调试发现,原因是程序执行路径不完全一样,最主要的是复合控件的CreateChildControl。 很明显是同一个页面上控件创建一次就OK了,但后果是第一次查看的数据可以正常绑定复合控件,后面的就不行了(见代码1)。虽然每次给控件赋值(代码3)都会调用代码2的Set操作,但不会调用代码1的最后一句。这就导致了最初的怪现象。 //代码1 protected override void CreateChildControls() {             //base.CreateChildControls();             #region 控件初始化

  _tbxFinalPersonList = new TextBox();                 _tbxFinalPersonList.ID = "tbxFinalPersonList";                 _tbxFinalPersonList.ReadOnly = true;                 _tbxFinalPersonList.Width = TextWidth;                 _tbxFinalPersonList.Height = TextHeight;                 _tbxFinalPersonList.TextMode = TextMode;    _tbxFinalPersonList.Text = ViewState["PersonNameList"] == null ? string.Empty : ViewState["PersonNameList"].ToString();

  ...创建其他控件 }

//代码2 复合控件属性:

public string PersonNameList         {             get { return _tbxFinalPersonList.Text; }             set             {                 ViewState["PersonNameList"] = value;                 CreateChildControls();//710                 //_tbxFinalPersonList.Text = value;             }//2008.5.16孙宜贵,2008-5-19孙宜贵 7-9孙宜贵         }

//代码3 this.PersonList1.PersonNameList = papaerModule.AuthorName;//得到获奖人员列表

所以,只好在每次绑定时,重新调用代码1,但是重复创建仍然会产生错误,后来把代码1改造后(代码4)就通过了。 //代码4 protected override void CreateChildControls() {             //base.CreateChildControls();             #region 控件初始化       if (_tbxFinalPersonList == null)             {   _tbxFinalPersonList = new TextBox();                 _tbxFinalPersonList.ID = "tbxFinalPersonList";                 _tbxFinalPersonList.ReadOnly = true;                 _tbxFinalPersonList.Width = TextWidth;                 _tbxFinalPersonList.Height = TextHeight;                 _tbxFinalPersonList.TextMode = TextMode;

  ...创建其他控件       }                _tbxFinalPersonList.Text = ViewState["PersonNameList"] == null ? string.Empty : ViewState["PersonNameList"].ToString();    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值