这是用户控件中加了一个DataList ,然后在模板中加了一个panel,默认值为不显示,如何在代码中获取panel,根据条件设置为显示,请解答一下,谢谢了
<asp:DataList ID="DataList1" runat="server"><div>
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
</div>
</asp:DataList>
我是这样做的(this. DataList1.FindContorl("Panel1") as Panel).visible=true;
但是这样没获取到控件,报空
<asp:DataList ID="DataList1" runat="server"><div>
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
</div>
</asp:DataList>
我是这样做的(this. DataList1.FindContorl("Panel1") as Panel).visible=true;
但是这样没获取到控件,报空
DataLisst1.Items[i].FindControl("")
要用差不多这样的方法去取,遍历DataList 在DataListItem使用FindControl方法
pn1.visible=true;
<ItemTemplate>
<div style=" width=100%;">
<table align =left width =100% >
<tr>
<td align =left style=" font-size:12px; color:#999999;">留言人: <asp:Label ID="author_nameLabel" runat="server" Text='<%# Eval("commenter") %>' />
|发表时间: <asp:Label ID="publish_dateLabel" runat="server" Text='<%# Eval("publishedTime") %>' />
//盘子默认是不显示的
<asp:Panel
ID="Panel1" runat="server" Visible="False">
<asp:LinkButton ID="LinkButton1" runat="server">回复</asp:LinkButton>
</asp:Panel>
</td>
</tr>
<tr>
<td align ="left"><asp:TextBox ID="T1" Width =100% ReadOnly=true Columns=62 Rows=5 runat="server" Text='<%# Eval("leaveComment") %>' TextMode="MultiLine" /></td>
</tr>
</table>
</div>
</ItemTemplate>
</asp:DataList> protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack){
//数据源绑定
DataBind();
//如何从ItemTemplate中获取Panel1 ,从而更改Panel1的属性为显示
// (this.DataList1.Items[0].FindControl("Panel1") as Panel).Visible = true;只能设置第一项的可以显示,但其他项的不显示
(this.DataList1.Items[0].FindControl("Panel1") as Panel).Visible = true;
}
DataList1.Items[1]
DataList1.Items[2]
.......这样的东西。这就是运行时的DataList1的内容,你要的子控件当然要想内容去索取,要找对对象。如果你想知道一些关于模板的原理,可以参考:http://www.google.com.hk/search?q=asp.net+InstantiateIn&hl=zh-CN&newwindow=1&safe=strict&prmd=imvns&source=lnt&tbs=lr:lang_1zh-CN%7Clang_1zh-TW&lr=lang_zh-CN%7Clang_zh-TW&sa=X&ei=ilAMT5_AC4-uiQfR2cD3BQ&ved=0CAgQpwUoAQ&biw=1364&bih=707