【问题标题】:ASP.NET Panel FindControl within DataList to change property C#DataList 中的 ASP.NET 面板 FindControl 更改属性 C#
【发布时间】:2010-05-25 14:55:50
【问题描述】:

我是这个 ASP.NET 的新手。在我的页面中,我有一个带有 FooterTemplate 的 Datalist。在页脚中,我有几个面板,这些面板将根据 QueryString 可见。我遇到的问题是试图在 Page_Load 上找到这些面板来更改可见属性。有没有办法在 Page_Load 中找到这个控件?例如这是 aspx 页面的一部分:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
 <asp:DataList ID="dlRecords" runat="server">
  <FooterTemplate>
   <asp:Panel ID="pnlArticleHeader" runat="server" Visible="false" >
   </asp:Panel>
  </FooterTemplate>
 </asp:Datalist>
</asp:Content>

这是代码隐藏中的一些内容:

protected void Page_Load(object sender, EventArgs e)
    {
        location = Request.QueryString["location"];
        if (location == "HERE")
        {
          Panel pnlAH = *Need to find control here*;
          pnlAH.Visible=true;
         }
      }

就像我说的那样,我是新手。我发现的一切似乎都不起作用,所以我决定发布一个具体问题。提前致谢

【问题讨论】:

    标签: c# asp.net datalist findcontrol


    【解决方案1】:

    DataList 有事件 OnItemCreated,覆盖允许选择行类型:

      Panel _pnlArticleHeader;
      void Item_Created(Object sender, DataListItemEventArgs e)
      {
    
         if (e.Item.ItemType == ListItemType.Footer)
         {
    
            _pnlArticleHeader =(Panel)e.Item.FindControl("pnlArticleHeader");
          }
    
      }
    

    在字段中调用事件后:_pnlArticleHeader,您将获得所需的面板。这种方式是安全的,因为只创建了一次。笔记!普通 DataList 行的相同方式将只返回最后一个。

    【讨论】:

    • 这是我开始工作的第一个。谢谢。我现在唯一的问题是我如何在我的代码中使用它。例如,在 Page_Load 中,我得到了 QueryString 位置。根据值,我有不同的代码块。我想将这段代码放在该代码中,而不是单独的 OnItemCreated 代码块中。我将如何完成这项工作?
    • 也许我只是不明白数据列表是如何/何时构建的。也许我只是在展示我对它如何工作的无知。是否可以在 OnItemCreated 之外获取它?
    • @SDC 要完成此操作,您将此处理程序“Item_Created”放入 Page_Load 所在的同一文件中。该事件将在 Page_load 之前执行,因此将分配变量 _pnlArticleHeader。在用于控制的 aspx 文件中,您需要声明事件处理程序:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2017-03-13
    • 1970-01-01
    • 2016-11-05
    • 2011-01-12
    • 2021-02-12
    相关资源
    最近更新 更多