这是用户控件中加了一个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;
但是这样没获取到控件,报空

解决方案 »

  1.   

    取控件的方法错误
    DataLisst1.Items[i].FindControl("")
    要用差不多这样的方法去取,遍历DataList 在DataListItem使用FindControl方法
      

  2.   

    Panel pn1 = (Panel)DataList1.FindControl("Panel1");
    pn1.visible=true;
      

  3.   

    在datalist的数据绑定事件里面处理,通过FindControl来找到你要处理的panel,也可以通过在页面上使用JS来控制它的隐藏和显示。或者在后台写一个public方法getdata(),在前台绑定是用<%=getdata(Eval('数据列'))%>
      

  4.   

    <asp:DataList ID="DataList1" runat="server">
            <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;
            }
          
      

  5.   

    不存在什么“模板里的控件值”概念。运行时模板就是一个编译好了的程序,它用于动态产生    DataList1.Items[0]
        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