Program,Life,Society.....

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

HTML Part:

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

                    
</ItemTemplate>
                
</asp:datalist>


Codebehind Part:
Private Sub Page_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        
'Put user code to initialize the page here

        Dim t As New DataTable
        
Dim cm As New
 SqlCommand
        cm.CommandText 
= "select * from customers"

        cm.CommandType = CommandType.Text
        cm.Connection 
=
 SqlConnection1
        
Dim ad As New
 SqlDataAdapter
        ad.SelectCommand 
=
 cm
        ad.Fill(t)
        DataList1.DataSource 
=
 t
        DataList1.DataBind()
    
End Sub

    
Private Sub DataList1_ItemDataBound(ByVal sender As ObjectByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
        
Dim hl As
 HyperLink
        
'在这里会出错

        hl = CType(e.Item.FindControl("HyperLink1"), HyperLink)
        hl.Text 
+= "ddd"

    End Sub
    


看了Meyer回复

我明白了,在执行时它是对所有的ItemType的进行查询,当我添加 HeaderTempate时候,它首先对ListItemType.Head 查询,这时当然用FindControl时找不到HyperLink1,于是下面自然会报没有实例化的错误了。改善的代码是。
要注意是在ItemTemplate中含有两种ListItemType,分别是AlternatingItem和Item
                    Private Sub DataList1_ItemDataBound(ByVal sender As ObjectByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
        
Dim hl As HyperLink
        
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
            hl 
= CType(e.Item.FindControl("HyperLink1"), HyperLink)
            hl.Text 
+= "ddd"
        End If
    
End Sub

posted on 2004-08-03 12:09  vuejs3  阅读(3211)  评论(3编辑  收藏  举报