请先看代码:
showatt.aspx.cn 中
 protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["UserID"] == null)
        {
            this.HyperLinkDown.Visible = false;   //提示 “showatt”并不包含“HyperLinkDown”的定义
            PanelDown.Visible = true;             //提示 当前上下文中不存在名称“PanelDown”
        }
        else
        {
            HyperLinkDown.Visible = true;
            PanelDown.Visible = false;
        }
在showatt中,HyperLinkDown和PanelDown都是命名过的,在我的另一个页面里,这样的方法没出现这个提示。不同的是上面的这个页面中HyperLinkDown和Panel是放在datalist中的,会不会是这个问题?请问如何解决呢?谢谢!

解决方案 »

  1.   

    不同的是上面的这个页面中HyperLinkDown和Panel是放在datalist中的,会不会是这个问题?
    -------------------
    那就是了~请问如何解决呢?
    -------------
    通常需要首先找到承载控件的父控件(datalist,row),然后使用findcontrol方法才找得到
      

  2.   

    谢谢楼上兄弟,刚证实了确实是这个问题。
    请问在cs中如何用findcontrol这个方法呢?能不能写个范例
      

  3.   

    谢谢!
    补充一个问题:
    HyperLink控件是放在datalist自定义模板里的。而不是datalist的列
      

  4.   

    不好意思,因不知道你到底要做什么,希望这几行代码对你有所帮助:
    HTML:<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
         <asp:DataList ID="datalist" runat="server"  RepeatColumns="1" CellPadding="3" >
          <HeaderTemplate >
             <asp:Label ID="lbl" runat="server"  Text="Show Header"></asp:Label>
          </HeaderTemplate>     <ItemTemplate >
            
             <asp:HyperLink ID="Hlink" runat="server"  Text='<%#Eval("productid") %>' ></asp:HyperLink>
         </ItemTemplate>
         
              <FooterTemplate >
               <asp:Label ID="lblFoot" runat="server"  Text="Show Footer"></asp:Label>
              </FooterTemplate>
              
         </asp:DataList>
            <asp:ListBox ID="ListBox1" runat="server" Height="272px" Width="91px"></asp:ListBox>
        </div>
        </form>
    </body>
    </html>CS:
     public partial class FindControlTest : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    SetBind();                foreach (DataListItem dli in datalist.Items)
                    {
                        HyperLink  txt = dli.FindControl("Hlink") as HyperLink;  //FindControl方法的使用
                        if (txt != null)
                        {
                            string s = txt.Text;
                            ListBox1.Items.Add(s);
                        }
                    }
                }
            }
            public void SetBind()
            {
                string connstring = ConfigurationManager.ConnectionStrings["ConnStr"].ToString();
                using (SqlConnection conn = new SqlConnection(connstring))
                {
                    conn.Open();
                    string sql = "select top 10 *  from products";
                    SqlDataAdapter ada = new SqlDataAdapter(sql,conn);
                    DataSet ds = new DataSet();
                    ada.Fill(ds);
                    datalist.DataSource =ds;
                    datalist.DataBind();
                }
            }
        }
      

  5.   

    谢谢,是这样的showatt.aspx.cn 中 
     protected void Page_Load(object sender, EventArgs e) 
        { 
            if (Session["UserID"] == null) 
            { 
                从datalist1的自定义模板把HyperLinkDown这个控件.Visible = false;   
                            //把datalist1自定义模板的hyperlinkdown设为不显示。
            } 
            else 
            { 
                同上.Visible = true; 
                
            }