访问asp.net上的Datalist Bound Template标签控件

时间:2013-03-22 12:46:32

标签: asp.net vb.net

感谢您花时间阅读我的查询。我现在已经到处搜索了两天,但仍然无法找到与我有类似问题的人。我有一个拥有母版页的asp.net项目。在母版页上有一个内容占位符控件。我有一个从母版页派生的子页面。在子页面上,我添加了一个数据列表控件,该控件绑定到由存储过程填充的Sqldatasource。 datalist控件有一个标签项模板。

我正在尝试使用以下代码访问标签:

 Protected Sub DataList1_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
        Dim myLabel As Label = CType(DataList1.FindControl("UnitPriceLabel"), Label)
        myLabel.Text = "new text"

    End If
End Sub

我得到的对象引用未设置为对象错误的实例,因为" myLabel"什么都没有。

我从这里尝试过代码:

accessing controls in datalist headertemplate from codebehind

Accessing asp.net controls of datalist in codebehind

Define Datalist HeaderTemplate in c# from code behind

how to access items from datalist

我认为它与母版页控件上的contentplaceholder有关,但我无法弄明白。

1 个答案:

答案 0 :(得分:0)

更改此行:

Dim myLabel As Label = CType(DataList1.FindControl("UnitPriceLabel"), Label)

到此:

Dim myLabel As Label = CType(e.Item.FindControl("UnitPriceLabel"), Label)

如果您愿意,甚至可以在一行中执行此操作:

DirectCast(e.Item.FindControl("UnitPriceLabel"), Label).Text = "new text"

然而,personnaly我只会这样做如果我需要访问标签一次而不是多次。

查看Microsoft的this article以获取更多信息。