0

感谢您花时间阅读我的查询。我已经到处搜索了 2 天,但仍然找不到与我有类似问题的人。我有一个具有母版页的 asp.net 项目。在母版页上有一个内容占位符控件。我有一个从母版页派生的子页。在子页面上,我添加了一个 datalist 控件,该控件绑定到由存储过程填充的 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”一无所获。

我已经尝试过这里的代码:

从代码隐藏访问 datalist headertemplate 中的控件

在代码隐藏中访问 datalist 的 asp.net 控件

从后面的代码在 C# 中定义 Datalist HeaderTemplate

如何访问数据列表中的项目

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

4

1 回答 1

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"

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

查看Microsoft 的这篇文章以获取更多信息。

于 2013-03-22T12:59:29.263 回答