6

「ListView」コントロール内でID =「Label」の「Label」コントロールを見つけたいです。私は次のコードでこれをやろうとしていました:

((Label)this.ChatListView.FindControl("Label")).Text = "active";

しかし、私はこの例外を受け取っています: Object reference not set to an instance of an object

ここで何が問題なのですか?

これは 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>
4

5 に答える 5

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;

        // ...
    }
}

で取得したい場合は、特定の行Page_Loadを知り、次のようにコントロールを取得する必要があります。

var theLabel = this.ChatListView.Items[<row_index>].FindControl("Label1") as Label;
于 2013-02-15T21:06:42.647 に答える
1

引数ではLabel1である必要があります。

 ((Label)this.ChatListView.FindControl("Label1")).Text = "active";

これはデータバインドされたイベントにあるはずです。

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

于 2013-02-15T20:55:58.867 に答える
1

それを試してみてください:

protected void ChatListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item is ListViewDataItem)
    {
         var yourLabel = e.Item.FindControl("Label1") as Label;
         // ...
    }
}
于 2015-09-04T10:00:41.040 に答える
1

FindControlコードを回避するこの問題の簡単な解決策の 1 つはOnInit、ラベルに配置することです。

これにより、ページ コードが次のように変更されます。<asp:Label ID="Label" runat="server" Text="" Visible="True" OnInit="Label_Init"></asp:Label>

そして、あなたのコードビハインドには、次のような関数があります:

protected void Label_Init(object sender, EventArgs e)
{
     Label lblMyLabel = (Label)sender;
     lblMyLabel.Text = "My Text";
}
于 2016-03-31T20:42:58.733 に答える