aspx里的代码如下<asp:DataList ID="DataList3" runat="server" OnSelectedIndexChanged="DataList3_SelectedIndexChanged">         
          <ItemTemplate>       
          <table width="100%" border="0" cellpadding="2" cellspacing="2" class="table2">
            <tr>
              <td valign="top"><strong class="STYLE1">咨询内容</strong>:<span class="hang"><%# Eval("Wenti")%></span></td>
              </tr>  
          </table>
            <table width="100%" border="0" cellpadding="2" cellspacing="2" class="table2">
              <tr>
                <td valign="top" class="STYLE2"><%# Eval("Huida")%></td>
              </tr>
              <tr>
             <asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px"></asp:Panel><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>  <asp:Button ID="Button1" runat="server" Text="Button" />   
              </tr>
          </table> 
       </ItemTemplate>
</asp:DataList>
后台怎么也获取不到Panel1,TextBox1,Button1
但是放在datalist外面却能获取到
 

解决方案 »

  1.   

    要先找到DataList3的某行,然后才能FindControl 某个控件
      

  2.   

    CSDN很多这问题
    刚刚看见个,http://topic.csdn.net/u/20090330/18/8721c775-9f10-4ea3-a772-88bf4c991e2f.html
    自己多看下
      

  3.   


    咨询内容后面是用户提出的问题
    管理员登陆之后 如果有对这个问题的答复就显示答复 没有就显示文本框和提交按钮现在我想判断一下 如果某个datalist列里的问题有了答复就让 panel隐藏 没有则显示
      

  4.   

    用      for(int i=0;i<DataList3.Items.Count;i++){
                 Panel panel1=(Panel)DataList3.Items[i].FindControl("Panel1");
                    Label label1=(Label)DataList3.Items[i].FindControl("Label1");
                    if (label1.Text.Equals(""))
                    {
                        panel1.Visible = true;                }
                    else {                    panel1.Visible = false;                
                    }
                
                
                }
    搞定了 谢谢大家
      

  5.   

    在数据绑定控件中要通过FindControl来找到控件
      

  6.   

    在datalist中ItemCommand中这样引用: 
    Image img=(Image)e.Item.FindControls("img")
      

  7.   

    在datalist中ItemCommand中这样引用: 
    Image img=(Image)e.Item.FindControls("img")protected void dList_ItemCommand(object source, DataListCommandEventArgs e) 

    if (e.CommandName == "show") 

    string sName = ((Label)e.Item.FindControl("lblName")).Text;//找到控件,得到Text 

    }
      

  8.   

    这样写
    for(int i=0;i<DataList3.Items.Count;i++){
                 Panel panel1=DataList3.Items[i].FindControl("Panel1") as Panel;
                    Label label1=DataList3.Items[i].FindControl("Label1") as Label;
                    if (label1!=null&&label1.Text.Equals(""))
                    {
                        if(panel1!=null)
                            panel1.Visible = true;                }
                    else {
                        if(panel1!=null)
                            panel1.Visible = false;                
                    }
                
                
                }
      

  9.   

    var btn = (Button)e.Item.FindControl("Button")
      

  10.   

    对了要在家上一个        if(e.Item.ItemType=???
      

  11.   


    <!--为DataList添加OnItemDataBound事件-->
    <!-- 页面代码 -->
    <asp:DataList ID="DataList3" runat="server" OnSelectedIndexChanged="DataList3_SelectedIndexChanged" OnItemDataBound="DataList3_ItemDataBound">         
        <ItemTemplate>       
            <table width="100%" border="0" cellpadding="2" cellspacing="2" class="table2">
                <tr>
                    <td valign="top"><strong class="STYLE1">咨询内容</strong>:<span class="hang"><%# Eval("Wenti")%></span></td>
                </tr>  
            </table>
            <table width="100%" border="0" cellpadding="2" cellspacing="2" class="table2">
                <tr>
                    <td valign="top" class="STYLE2"><%# Eval("Huida")%></td>
                </tr>
                <tr>
                    <asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px"></asp:Panel><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>  <asp:Button ID="Button1" runat="server" Text="Button" />   
                </tr>
            </table> 
        </ItemTemplate>
    </asp:DataList>//cs文件代码
    protected void DataList3_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Panel Panel1 = e.Item.FindControl("Panel1") as Panel;
            Response.Write(Panel1.ClientID);
        }
    }
      

  12.   


    //补充cs文件代码
    protected void DataList3_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            //获取控件的引用
             Panel Panel1 = e.Item.FindControl("Panel1") as Panel;
            TextBox TextBox1 = e.Item.FindControl("TextBox1") as TextBox;
            Button Button1 = e.Item.FindControl("Button1") as Button;        Response.Write(Panel1.ClientID + "<br>");
            Response.Write(TextBox1.ClientID + "<br>");
            Response.Write(Button1.ClientID + "<br>");    }
    }