在ListView控件中查找控件

The*_*mpp 6 c# asp.net webforms exception

我想在"ListView"控件中找到ID ="Label"的"Label"控件.我试图使用以下代码执行此操作:

((Label)this.ChatListView.FindControl("Label")).Text = "active";
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个异常:对象引用未设置为对象的实例.

这有什么不对?

这是aspx代码:

<asp:ListView ID="ChatListView" runat="server" DataSourceID="EntityDataSourceUserPosts">
    <ItemTemplate>
        <div class="post">
            <div class="postHeader">
                <h2><asp:Label ID="Label1" runat="server" 
                    Text= '<%# Eval("Title")  + " by " + this.GetUserFromPost((Guid?)Eval("AuthorUserID")) %>' ></asp:Label></h2>
                <asp:Label ID="Label" runat="server" Text="" Visible="True"></asp:Label>
                <div class="dateTimePost">
                   <%# Eval("PostDate")%>
                </div>
            </div>
            <div class="postContent">
                <%# Eval("PostComment") %>
            </div>
        </div>
    </ItemTemplate>

</asp:ListView>
Run Code Online (Sandbox Code Playgroud)

msh*_*yem 6

Listview是一个数据绑定控件; 因此,对于不同的行,它内部的控件将具有不同的ID.您必须首先检测行,然后获取控件.最好抓住这样的控件是在像这样的事件OnItemDataBound.在那里,你可以这样做来抓住你的控制:

protected void myListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        var yourLabel = e.Item.FindControl("Label1") as Label;

        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要抓住它Page_Load,则必须知道特定行并将控件检索为:

var theLabel = this.ChatListView.Items[<row_index>].FindControl("Label1") as Label;
Run Code Online (Sandbox Code Playgroud)


Igo*_*goy 1

争论中应该是Label1:

 ((Label)this.ChatListView.FindControl("Label1")).Text = "active";
Run Code Online (Sandbox Code Playgroud)

这应该在数据绑定事件中。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx