Access a control inside a the LayoutTemplate of a ListView

后端 未结 5 821
花落未央
花落未央 2020-12-17 09:05

How do I access a Control in the LayoutTemplate of a ListView control?

I need to get to litControlTitle and set its Text

相关标签:
5条回答
  • 2020-12-17 09:20

    Try this:

    ((Literal)lv.FindControl("litControlTitle")).Text = "Your text";
    
    0 讨论(0)
  • 2020-12-17 09:22

    The complete solution:

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

    In codebehind:

    protected void OnLayoutCreated(object sender, EventArgs e)
    {
        (lv.FindControl("lt_Title") as Literal).Text = "Your text";
    }
    
    0 讨论(0)
  • 2020-12-17 09:22

    For Nested LV Loop:

    void lvSecondLevel_LayoutCreated(object sender, EventArgs e)
    {
        Literal litText = lvFirstLevel.FindControl("lvSecondLevel").FindControl("litText") as Literal;
        litMainMenuText.Text = "This is test";
    }
    
    0 讨论(0)
  • 2020-12-17 09:26

    In case you need the VB version, here it is

    Dim litControl = CType(lv.FindControl("litControlTitle"), Literal)
    litControl.Text = "your text"
    
    0 讨论(0)
  • 2020-12-17 09:28

    This technique works for template layout; use the init event of the control:

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

    And capture a reference to the control for use in the code-behind (e.g) in the ListView's DataBound event:

    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 讨论(0)
提交回复
热议问题