控件结构如下:
Page
  DataGrid
    TemplateItem
      PlaceHolderPlaceHolder在一般状态下并无内容,当某种特定的情况发生时,用一个UserControl放入PlaceHolder。也就是说,在模板列的模板中是没有UserControl对象的,它是被动态地加入模板中的。我的问题是:在DataGrid的UpdateCommand事件处理程序中,如何读取UserControl的内容?

解决方案 »

  1.   

    PlaceHolder ph = (PlaceHolder) e.Item.FindControl("PlaceHolder")
    if (ph != null)
      UserControl ctl = (UserControl) ph.FindControl("UserControl")if (ctl != null)
    {
      ...
    }试过了,没用,找不到UserControl。
      

  2.   

    研究了一个下午,终于知道是为什么了。
    因为UserControl是在Page_Load事件中动态地加载,而在页面处理ViewState时该控件还没有加载,因此无法初始化它的值,在后面也就没办法读取了。
      

  3.   

    从你的情况来看,似乎是在UpdateCommand事件处理程序里对DataGrid进行绑定的,也就是说,数据的绑定没有放在Page_Load事件里,这种情况下,在Page_Load事件之后,UserControl还没有被加载,那它就不能在之后的回发处理过程中被初始化。除非你自己编写代码来处理回发数据,否则要在Page_Load事件里先对DataGrid进行绑定,构造一个与提交之前结构一样的页面,这样才能在之后的过程中获取UserControl中的值。