使用Asp.net和VB.net。我在网页上有一个DataList
。数据器有一个标签控件。我想用从后续记录中获得的信息更新第一个记录中的标签控件的文本,因为这些后续记录是绑定的。换句话说,每次绑定数据表时,我都希望识别第一个记录中的标签,然后更新该标签的文本。我试图通过在第一个记录中获得标签的ClientID
来在ItemDataBound
中做到这一点:
Dim strMealPrice As String = CType(e.Item.FindControl("lblMealPrice"), Label).ClientID
,然后将ClientID
保存在数据表之外的隐藏标签中。
If lblhidMealHeaderID.Text = "" then
lblhidMealHeaderID.Text = strMealPrice
End if
到目前为止一切都很顺利。
然后每次数据表ItemDataBound
被触发时,我使用findcontrol来尝试更新第一个记录中的标签,但我不确定如何在使用标签控件的ClientID
(lblhidMealHeaderID.text
)变量时格式化findcontrol。但是,即使我在第一个记录中硬编码标签的ClientID
,我也不能让它工作。
Dim tempLabel As Label = DataList1.FindControl("DataList1_ctl00_lblMealPrice")
或
Dim tempLabel As Label = CType(e.Item.FindControl("DataList1_ctl00_lblMealPrice"), Label)
我得到一个Object reference not set to an instance of an object.
当我试图写到tempLabel。
你可以看到我在这里抓住了。首先,这是最好的方法来做到这一点-是ItemDataBound
我应该尝试这个吗?也许你不能更新以前的记录,而DataList
是"绑定"后续记录。第二,是ClientID的方式做到这一点-我看到ClientID
主要用于javascript?第三,如何使用ClientID
正确格式化FindControl ?
在ItemDataBound
中使用
If e.Item.ItemIndex = 0 Then
CType(e.Item.FindControl("lblMealPrice"), Label).Text = strMealPrice
End If
你可以在绑定后的任何时间通过循环找到第一个标签。
For Each item as DataGridItem In dgGrid.Items
CType(item.FindControl("lblMealPrice"), Label).Text = strMealPrice
Next