2009-01-11 28 views
24

Làm cách nào để truy cập Điều khiển trong điều khiển LayoutTemplate của điều khiển ListView?Truy cập điều khiển bên trong LayoutTemplate của ListView

Tôi cần truy cập litControlTitle và đặt thuộc tính Text.

<asp:ListView ID="lv" runat="server"> 
    <LayoutTemplate> 
    <asp:Literal ID="litControlTitle" runat="server" /> 
    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
    </ItemTemplate> 
</asp:ListView> 

Bạn nghĩ gì? Có lẽ thông qua sự kiện OnLayoutCreated?

Trả lời

36

Hãy thử điều này:

((Literal)lv.FindControl("litControlTitle")).Text = "Your text"; 
+0

Tôi đã thử điều đó lúc đầu, nhưng điều đó không hiệu quả. Sau đó tôi đến đây. Cảm ơn mặc dù! – craigmoliver

+3

rất lạ ... Tôi đặt mã này bên trong cuộc gọi lại của OnLayoutCreated, và khi tôi ràng buộc ListView nó hoạt động tốt ... – tanathos

+0

oh, tôi cũng không đặt nó trong sự kiện đó, cố gắng – craigmoliver

18

Các giải pháp hoàn chỉnh:

<asp:ListView ID="lv" OnLayoutCreated="OnLayoutCreated" runat="server"> 
    <LayoutTemplate> 
    <asp:Literal ID="lt_Title" runat="server" /> 
    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
    </ItemTemplate> 
</asp:ListView> 

Trong codebehind:

protected void OnLayoutCreated(object sender, EventArgs e) 
{ 
    (lv.FindControl("lt_Title") as Literal).Text = "Your text"; 
} 
+0

Điều này hoạt động tốt – Mahesh

+0

Giải pháp này ổn định hơn so với tanathos. đôi khi của tanathos không hoạt động khi DataBind và truy cập trong cùng một phương thức. – Gqqnbig

3

Kỹ thuật này làm việc cho mẫu bố trí; sử dụng các sự kiện init của điều khiển:

<asp:ListView ID="lv" runat="server" OnDataBound="lv_DataBound"> 
    <LayoutTemplate> 
    <asp:Literal ID="litControlTitle" runat="server" OnInit="litControlTitle_Init" /> 
    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
    </ItemTemplate> 
</asp:ListView> 

Và chụp một tham chiếu đến điều khiển để sử dụng trong code-behind (ví dụ) trong DataBound sự kiện của ListView:

private Literal litControlTitle; 

protected void litControlTitle_Init(object sender, EventArgs e) 
{ 
    litControlTitle = (Literal) sender; 
} 

protected void lv_DataBound(object sender, EventArgs e) 
{ 
    litControlTitle.Text = "Title..."; 
} 
0

Đối với lồng LV Loop:

void lvSecondLevel_LayoutCreated(object sender, EventArgs e) 
{ 
    Literal litText = lvFirstLevel.FindControl("lvSecondLevel").FindControl("litText") as Literal; 
    litMainMenuText.Text = "This is test"; 
} 
Các vấn đề liên quan