更新标签控件在ItemDataBound期间的DataList的第一个记录中

时间:2014-03-19 13:18:55

标签: asp.net vb.net label datalist

使用Asp.net和VB.net。我在网页上有一个DataList。 datalist有一个标签控件。我想更新第一个记录中标签控件的文本,其中包含从后续记录中获取的信息,因为后续记录是数据绑定的。换句话说,每次绑定datalist时,我想在第一个记录中标识标签,然后更新该标签的文本。我试图通过在第一条记录中获取标签的ItemDataBound来在ClientID中执行此操作:

   Dim strMealPrice As String = CType(e.Item.FindControl("lblMealPrice"), Label).ClientID

然后将ClientID保存在数据列表之外的隐藏标签中。

 If lblhidMealHeaderID.Text = "" then
  lblhidMealHeaderID.Text = strMealPrice
 End if

到目前为止,一切都有效。

然后每次触发datalist ItemDataBound时我都会使用findcontrol来尝试更新第一条记录中的标签,但我不确定如何在为标签控件{{1}使用变量时格式化findcontrol }(ClientID)。但即使我在第一个记录中硬编码标签的lblhidMealHeaderID.text,我也无法使其工作。

ClientID

 Dim tempLabel As Label = DataList1.FindControl("DataList1_ctl00_lblMealPrice")

当我尝试写入tempLabel时,我得到Dim tempLabel As Label = CType(e.Item.FindControl("DataList1_ctl00_lblMealPrice"), Label)

你可以看到我在这里抓住。首先,这是最好的方法吗?Object reference not set to an instance of an object.我应该尝试这个吗?当ItemDataBound“绑定”后续记录时,您可能无法更新以前的记录。其次,ClientID是这样做的方式 - 我看到DataList主要用于javascript?第三,如何使用ClientID正确格式化FindControl?

非常感谢任何和所有帮助。

1 个答案:

答案 0 :(得分:1)

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