2014-03-19 25 views
0

使用Asp.net和VB.net。我在網頁上有一個DataList。數據列表有一個標籤控件。我想用後續記錄中獲得的信息更新第一條記錄中的標籤控件的文本,因爲這些後續記錄是數據綁定的。換句話說,每次數據綁定的時候,我都想識別第一條記錄中的標籤,然後更新該標籤的文本。我試圖通過獲取標籤的ClientID中的第一條記錄要做到這一點在ItemDataBound更新標籤控件在ItemDataBound期間DataList的第一條記錄

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

,然後認爲在一個隱藏的標籤ClientID外的數據列表中。

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

一切工作到這一點。

然後,每個數據列表ItemDataBound被解僱時我使用的FindControl來嘗試更新的第一條記錄的標籤,但我不能確定如何使用一個變量時,格式化的FindControl標籤控件的ClientIDlblhidMealHeaderID.text)。但即使當我在第一個記錄中對標籤的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?

任何和所有的幫助,非常感謝。

回答

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 
+0

Bharadwaj - 感謝您的回覆,但我不明白這將如何解決我的問題。該代碼在綁定該記錄(索引= 0)時在第一條記錄中設置標籤的文本。當它綁定其他記錄時(當索引= 1或2或3等時),我需要寫入該標籤 – user1375002

+0

@ user1375002我更新了我的答案。希望它能幫助你。 – Bharadwaj

+0

再次感謝。這看起來會起作用。我實際上最終通過在itemdatabound事件中使用單獨的數據連接到數據庫來解決問題。 – user1375002