我们在使用DataList时常常用到ItemDataBound事件,但是这次我在使用中
e.Item.FindControl失效了,在DataList中放置的一个HyperLink控件,
通过e.Item.FindControl怎么也找不到了,我查看代码,没有错误,
最后才发现只要在HTML部分含有<HeaderTemplate></HeaderTemplate>就会失效,
删除后正常。查了资料,没找到(不想找了)

HTML Part:

致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)<asp:datalist id="DataList1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 16px" runat="server"
致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                    Width
="584px" Height="208px">
致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                    
<HeaderTemplate>
致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                    
<!--错误就在这里 begine-->
致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                    
</HeaderTemplate>
致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                    
<ItemTemplate>
致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                        
<!--错误就在这里 end-->
致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                        
<asp:HyperLink id=HyperLink1 runat="server" Width="520px" Text='<%# DataBinder.Eval(Container.dataItem,"companyName") %>'>
致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                        
</asp:HyperLink>

致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                    
</ItemTemplate>
致命的HeaderTempate,导致ItemDataBound中e.Item.FindControl失效(修正)                
</asp:datalist>


Codebehind Part:
    


看了Meyer回复

我明白了,在执行时它是对所有的ItemType的进行查询,当我添加 HeaderTempate时候,它首先对ListItemType.Head 查询,这时当然用FindControl时找不到HyperLink1,于是下面自然会报没有实例化的错误了。改善的代码是。
要注意是在ItemTemplate中含有两种ListItemType,分别是AlternatingItem和Item
End Sub

相关文章: