我想在“ListView”控件中找到ID =“Label”的“Label”控件。我试图使用以下代码执行此操作:
((Label)this.ChatListView.FindControl("Label")).Text = "active";
但是我得到了这个例外:对象引用没有设置为对象的实例。
这里有什么问题?
这是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>
答案 0 :(得分: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;
答案 1 :(得分:2)
此函数将从数据库中获取作者姓名,您只需调用您的方法获取作者姓名然后将其返回
protected string GetUserFromPost(Guid? x)
{
// call your function to get Author Name
return "User Name";
}
要在列表视图中绑定标签,您必须在列表视图ItemDataBound
事件
protected void ChatListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
Label lbl = e.Item.FindControl("Label") as Label;
lbl.Text = "Active";
}
}
以下是aspx代码更改的列表视图(只需添加onitemdatabound="ChatListView_ItemDataBound"
):
asp:ListView
ID="ChatListView"
runat="server"
DataSourceID="EntityDataSourceUserPosts"
onitemdatabound="ChatListView_ItemDataBound"
答案 2 :(得分:1)
它应该是争论中的Label1:
((Label)this.ChatListView.FindControl("Label1")).Text = "active";
这应该是数据绑定事件。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx
答案 3 :(得分:1)
试一试:
@
答案 4 :(得分:1)
避免FindControl
代码的一个简单的解决方案就是在您的标签上放置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";
}