日期:2014-05-18  浏览次数:20380 次

Datagrid事件丢失的问题
我自定义了一个incHome.ascx控件,其中包含了一个datagrid

我在index.aspx中使用loadcontrol调用incHome没有问题,事件一切正常。可是当我用另一个ascx控件调用LoadControl(@"incHome.ascx"),并且将它add到index.aspx的placdholder中的时候,我的selectedIndexChange事件就丢失了。就算我手动添加事件也没有用,跟踪过,事件肯定是被添加了,就是没有响应。

网上查了一下,找到以下一段解决方法

3、如果用户控件中包括DataGrid控件,那么加载控件后可能出现不响应DataGrid事件的问题。
这好像是一个bug,必须要将加载的控件进行强制转换,如:
Test userControl=(Test)Page.LoadControl(“Test.ascx”);
注意:上面使用的是Test类型,而不是Control!



但是对于他所说的Test类不是很明白,我自定义出来的Test.ascx, Test不是一个partial class吗,我怎么样可以直接实例化这个Test类?

------解决方案--------------------
看不出跟你找到的那个“解释”有什么关系。

但是不明白你是如何处理控件树的。一般来说,你大概是在不恰当的时候破坏了页面控件树结构。当更新控件树时,也就是把某个用户控件放入页面时,应该是在页面 load 完成之后,最好是在页面 prerender 事件中才去破环页面原本的控件树。

我回答过一个类似帖子:http://topic.csdn.net/u/20080314/20/1b21b10d-e709-430a-a583-5e563987ca8d.html

另外,"IsPostback"通常应该仅仅用在页面中,而非控件中。因为控件不一定是在页面第一次被访问时就被实例化的,而是动态装载的。实际上,页面上也无需使用IsPostback,只是使用它似乎方便一点。

不过还是不明白你如何处理控件树,因此无法回答你的问题。