动态加载控件

http://blog.csdn.net/yicko/archive/2005/04/16/349740.aspx

1、加载的是普通的控件,不是用户控件。用户控件用Loadcontrol,而普通控件则是新建对象,再加入到Controls中
2、可以加到各级容器的Controls中
3、定位通过对style的修改来完成。可以参考手工添加的控件的style。
4、自动具备ViewState,但其加载时间是在page_load 和控件事件响应之间。所以,在Page_load事件中,不能获得动态控件的状态。

动态控件和视图状态

在运行时动态创建控件时,控件的某些信息存储在随页呈现的视图状态中。但在将页回发到服务器时,先在 Page.Init 事件中实例化非动态控件(在页上定义)并加载视图状态信息,然后才能重新创建(通常在 Page_Load 处理程序中)动态控件。因此在动态控件创建之前,视图状态将暂时不与页的控件同步。在运行 Page_Load 事件之后,调用控件事件处理方法之前,将保持的视图状态信息加载到动态创建的控件中。

多数情况下,此视图状态处理模型都可以很好地工作。通常您将动态控件添加到容器的控件集合的末尾。因此,为动态控件存储的视图状态信息成为相应容器的视图状态结构末端的附加信息,并且页可以在控件创建之前忽略它。

但是,动态创建的控件的视图状态信息将在两种情况下会出问题:

  • 如果您在现有控件之间插入动态控件。
  • 如果您动态插入控件,并随后在往返期间使用不同的值重新插入它们。

如果在现有控件之间插入动态控件,该动态控件的视图状态信息将插入到视图状态结构的相应位置。在发送页并加载视图状态时,动态控件还不存在;因此,视图状态中的附加信息将不会对应于正确的控件。结果通常是出现表明存在无效强制转换的错误。

如果您在每次往返期间重新插入,则每次动态创建的控件都将从上述控件集的视图状态中选取属性值。在很多情况下,可以通过将容器控件的 EnableViewState 属性设置为 false 来避免此问题。在本例中,将不会保存有关动态控件的任何信息,并且与后续版本的控件之间不存在任何冲突。

http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vbcon/html/vbtskaddingcontrolstowebformspageprogrammatically.asp 
posted @ 2005-07-28 10:14  jetz  阅读(828)  评论(0编辑  收藏  举报