感谢您花时间阅读我的查询。我现在已经到处搜索了两天,但仍然无法找到与我有类似问题的人。我有一个拥有母版页的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有关,但我无法弄明白。
答案 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以获取更多信息。