上次有一相于用户控件中包括DataGrid控件的一个问题,在网上找了些资料给的答复如下
//============================================================
如果用户控件中包括DataGrid控件,那么加载控件后可能出现不响应DataGrid事件的问题。
   这好像是一个bug,必须要将加载的控件进行强制转换,如:
   Test userControl=(Test)Page.LoadControl(“Test.ascx”);   
   注意:上面使用的是Test类型,而不是Control!
   我在以前的Blog中曾提到过这个问题,这种方式将使系统的扩展性降低。 我有一个解决方案可以和大家讨论(运用策略模式):
   public class BaseControl : System.Web.UI.UserControl
  {
          public virtual BaseControl  ProcessThisControl();
           
  }
所有的用户控件从BaseControl 继承,如果有Datagrid控件,由overide ProcessThisControl方法 ,如:
          return this as Test;
 按如下方式加载控件:
    BaseControl  userControl=(BaseControl  )Page.LoadControl(“Test.ascx”);   
   userControl.ProcessThisControl();
//============================================================
呵呵,看了之后还是没看懂, 有哪位朋友可以说的清楚一点吗

解决方案 »

  1.   

    100MB asp和 asp.net空间 50/1年
    我看到了一个网站 100MB asp和 asp.net空间 现在促销,
    同学们可以做一个简单的个人网站用来找工作 ,
     支持 asp.net 一年才50元!不要错过哦!!!
    速度非常快,一般公司企业 足够用了!
    http://www.hi876.com 
    希望能对大家有帮助
      

  2.   

    批判
      Test userControl=(Test)Page.LoadControl(“Test.ascx”);  
    但是偷运了
      BaseControl  userControl=(BaseControl)Page.LoadControl(“Test.ascx”); 可见“这种方式将使系统的扩展性降低”乃莫须有的罪名。需要明确类型转换是经常的事。软件开发不是做学问。做学问,可以固执批判其它理论不符合规定而放弃使用,但是实际应用中如果共享别人的工具就要容忍别人的接口并且转换为自己的接口。
      

  3.   

    Test具有工作中所需要的接口,而BaseControl还仍然是是一个泛泛的接口,当调用BaseControl的子类的具体方法的时候就得写:
      BaseControl  userControl=(BaseControl)Page.LoadControl(“Test.ascx”); 
      ((Test)userControl).DoTest();
    这样反而增加了一层。