结构如下:
调用页面test.aspx
引用控件parent.ascx
<dxwgv:ASPxGridView ......>
......
<Templates>
<PreviewRow>
......
引用控件Sub.ascx
<asp:checkbox ......>......
</PreviewRow>
<EditForm>
......
引用控件Sub.ascx
<asp:checkbox ......>......
</EditForm>
</Templates>
</dxwgv:ASPxGridView>
开始尝试在Sub.ascx控件的Load、Init事件中初始化CheckBox的状态,到了test.aspx页面显示都失败
最后参考了搜索到的关于页面生命周期的讨论资料:
*********************************
user control is loaded in OnInit
*********************************
in Page: OnInit
In Page: Loading controls
in Control: OnInit
In Page: added to Controls
In Page: LoadViewState
in Control: LoadViewState
in Control: hidden Value:
in Control: LoadPostData Begin
in Control: hidden Value: Wed Jul 9 23:32:38 EDT 2003
in Control: LoadPostData End
In Page: OnLoad after base's Onload.
in Control: after base's OnLoad
hidden Value: Wed Jul 9 23:32:38 EDT 2003
in Control: RaisePostDataChange
In Page: OnPreRender
in Control: OnPreRender
hidden Value: Wed Jul 9 23:32:38 EDT 2003
In Page: SavedViewState
in Control: SaveViewState
*********************************
User Control is loaded in OnLoad
*********************************
in Page: OnInit
In Page: LoadViewState
In Page: OnLoad after base's Onload.
In Page: Loading controls
in Control: OnInit
in Control: LoadViewState
in Control: hidden Value:
In Page: added to Controls
in Control: after base's OnLoad
hidden Value:
in Control: LoadPostData Begin
in Control: hidden Value: Wed Jul 9 23:33:32 EDT 2003
in Control: LoadPostData End
in Control: RaisePostDataChange
In Page: OnPreRender
in Control: OnPreRender
hidden Value: Wed Jul 9 23:33:32 EDT 2003
In Page: SavedViewState
in Control: SaveViewState
ASP.NET服务器控件的生命周期:
1、初始化——Init事件(OnInit方法)
2、加载视图状态——LoadViewState方法(当页面回发时,首先从_ViewSatae字段信息中加载该控件的状态)
3、处理回发数据——LoadPostData方法
4、加载——Load事件(OnLoad方法)
5、发送回发更改通知——RaisePostDataChangedEvent方法
6、处理回发事件——RaisePostBackEvent方法
7、预呈现——PreRender事件(OnPreRender方法)
8、保存视图状态——SaveViewState方法
9、呈现——Render方法
10、处置——Dispose方法
11、卸载——UnLoad事件(OnUnLoad方法)
开始尝试在Sub.ascx的PreRender事件或重写SaveViewState方法处理,第一次显示可以,但是点击新增或修改后不再出发这些方法或事件,还是失败了。
最终解决办法是重写Sub.ascx的Render方法(在该方法中初始化),测试通过。