2014-03-19 3 views
0

Asp.net 및 VB.net 사용. 웹 페이지에 DataList이 있습니다. 데이터리스트에는 레이블 컨트롤이 있습니다. 이후 레코드가 데이터 바인딩 될 때 후속 레코드에서 얻은 정보로 첫 번째 레코드의 레이블 컨트롤 텍스트를 업데이트하려고합니다. 즉, 데이터리스트가 바인딩 될 때마다 첫 번째 레코드에서 레이블을 식별 한 다음 해당 레이블의 텍스트를 업데이트하려고합니다. 나는 첫 번째 레코드의 레이블의 ClientID을 받고하여 ItemDataBound에서이 작업을 수행하려고 해요 : 다음레이블 컨트롤 업데이트 ItemDataBound 동안 DataList의 첫 번째 레코드에

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

과 숨겨진 레이블 ClientID 그 DataList에 외부십시오.

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

모든 것은 지금까지 작동합니다.

그런 다음 DataList에 ItemDataBound 해고 때마다 나는 첫 번째 레코드의 레이블을 업데이트하려고의 FindControl을 사용하지만 난에 대한 변수를 사용할 때의 FindControl를 포맷하는 방법을 확실 해요 레이블 컨트롤의 ClientID ( lblhidMealHeaderID.text). 그러나 첫 번째 레코드의 레이블 ClientID을 하드 코딩해도 작동하도록 할 수는 없습니다. 내가 tempLabel에 기록 할 때

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. 얻을.

여기서 알 수 있듯이 나는 여기에서 파악하고 있습니다. 첫째, 이것이 최선의 방법입니까? ItemDataBound 어디에서 이것을 시도해야합니까? DataList이 후속 레코드를 "바인딩"하는 동안 이전 레코드를 업데이트 할 수 없습니다. 둘째, ClientID는 이것을 수행하는 방법입니다 - 나는 ClientID이 주로 자바 스크립트에 사용되는 것을 봅니까? 셋째, ClientID을 사용하여 FindControl을 올바르게 포맷하려면 어떻게해야합니까?

모든 도움을 주시면 대단히 감사하겠습니다. ItemDataBound 사용이

If e.Item.ItemIndex = 0 Then 
CType(e.Item.FindControl("lblMealPrice"), Label).Text = strMealPrice 
End If 

업데이트

에서

답변

1

당신은 항목을 통해 반복에 의해 결합 후 첫 번째 레이블 언제든지 찾을 수 있습니다.

For Each item as DataGridItem In dgGrid.Items 
CType(item.FindControl("lblMealPrice"), Label).Text = strMealPrice 
Next 
+0

Bharadwaj - 답장을 보내 주셔서 감사합니다.하지만 어떻게 문제가 해결되는지는 알 수 없습니다. 이 코드는 레코드를 바인딩 할 때 첫 번째 레코드의 레이블 텍스트를 설정합니다 (index = 0). 다른 레코드를 바인딩 할 때 해당 레이블에 쓸 필요가 있습니다 (인덱스 = 1 또는 2 또는 3 등일 때) – user1375002

+0

@ user1375002 내 대답을 업데이트했습니다. 희망이 당신을 도울 것입니다. – Bharadwaj

+0

다시 한번 감사드립니다. 그게 효과가있는 것처럼 보입니다. 실제로 itemdatabound 이벤트 동안 데이터베이스에 별도의 데이터 연결을 사용하여 작업을 마무리했습니다. – user1375002