关于动态控件的问题,高手进来看看,绝对不是很简单的问题!!!

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

asp.net中,我自己写了一个用户控件a,在这个用户控件里有一个label标签和一个datagrid控件.控件在自己的page_load函数里根据控件的id标志来查询数据库中的数据,一个值用来显示到label控件上,然后datagrid用来显示另外一些数据.然后在另外一个页面的cs文件里我动态生成几个a控件,然后赋给每个a控件不同的id值,然后把每个动态生成的控件添加到placeholder控件里.   问题就出来了,调试跟踪到用户控件里面,传的控件id值ok,根据id查询数据库也没问题.就是在page_load函数里给用户控件里的label标签和datagrid控件赋值的时候出了问题,提示:未设置对象引用到对象的实例.请各位大侠看看究竟是什么问题,该怎么去解决????????????分不够再加!!!!!!!!!

· 网友精彩回答:

发表者:sharpwt

发表者:seeko0

你是如何查找到label   和     datagrid的呢?  
   
  可以通过如下方式进行查找:  
   
  datagrid   d=(datagrid)asid.findcontrol("datagridid");   //as   id表示生成后的控件a的id  
  label   label   =(label)asid.findcontrol("labelid");

发表者:dapanda

page_load函数里根据控件的id标志来查询数据库中的数据  
   
  改在   page_init就可以了,我做过。

发表者:czhenq

可能是执行顺序的问题  
   
  用户控件的page_load事件是在主页面的page_load事件执行完成后才执行的。  
   
  你可以跟踪看看在对用户控件赋值时控件是否生成了。  
   
  另外:建议用户控件中的生成动态控件的代码不要放在page_load里。可以放在oninit里。  
   
  oninit   --   在页面加载前执行,先于所有的page_load事件

发表者:seeko0

private   void   page_load(object   sender,   system.eventargs   e)  
  {  
  strbigclassid   =   this.id.split   (_)[2].trim   ()   ;   //这个没问题  
   
  lbbigclassname.text   =   getbigclassname(strbigclassid)   ;  
   
  if(!ispostback){       //********************  
          binddatagrid()   ;  
  }  
  }  
 

发表者:sp1234

用户控件usercontrol并不是dg_forumclass,这个类只是你设计的用户控件的codebehinde类,真正由asp.net动态编译生成的控件是另外一个编译到操作系统临时目录中的、从dg_forumclass继承的类。因此,你使用  
   
  dg_forumclass   dg   =   new   dg_forumclass   ()  
   
  这种语法虽然得到一个usercontrol,但是实际上比真正你想要的用户控件少初始化很多东西。  
   
  动态得到用户控件,使用:  
  dg_forumclass   dg   =   this.page.loadcontrol("ascx文件的虚拟路径");

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved