【问题标题】:how to find control in ItemTemplate of the ListView from code behind of the usercontrol page?如何从用户控件页面后面的代码中找到 ListView 的 ItemTemplate 中的控件?
【发布时间】:2012-03-01 18:51:41
【问题描述】:

实际上,我正在使用 ASP.NET 和 C# 开发 Web 模板。 我在usercontrol 页面中有一个listview,在ItemTemplate 里面我有一个PlaceHolder,如下所示:

<asp:PlaceHolder ID="ph_Lv_EditModule" runat="server">  </asp:PlaceHolder>

我想从后面的代码访问这个PlaceHolder,我使用了以下不同的方法,但我无法访问它。

PlaceHolder ph_Lv_EditModule = (PlaceHolder)lv_Uc_Module.FindControl("ph_Lv_EditModule");

PlaceHolder ph_Lv_EditModule = (PlaceHolder)this.lv_Uc_Module.FindControl("ph_Lv_EditModule");

能否请您帮助我如何在我的usercontrol 页面后面的代码中找到此控件。 感谢您的考虑。

【问题讨论】:

    标签: c# asp.net placeholder user-controls


    【解决方案1】:

    正如 Tim Schmelter 所提到的,您还可以通过迭代您的 ListView 来访问您的控件,如下所示

    private void HideMyEditModule()
    {
        foreach (var item in lv_Uc_Module.Items)
        {
            PlaceHolder holder = item.FindControl("ph_Lv_EditModule") as PlaceHolder;
            if (holder!= null)
                holder.Visible = false;
        }
    }
    

    【讨论】:

      【解决方案2】:

      ListView 通常包含多个项目,因此占位符的 NamingContainer(由 FindControl 搜索)既不是 UserControl,也不是 ListView 本身。这是ListViewItem 对象。所以找到参考的一个地方是ListView's ItemDataBound event

      protected void ListView_ItemDataBound(object sender, ListViewItemEventArgs e)
      {
          if (e.Item.ItemType == ListViewItemType.DataItem)
          {
              var ph_Lv_EditModule = (PlaceHolder)e.Item.FindControl("ph_Lv_EditModule");
          }
      }
      

      如果您需要在其他地方引用,则必须迭代 ListView 的 Items,然后在 ListViewItem 上使用 FindControl

      顺便说一句,这与其他 DataBound 控件(如 GridView 或 Repeater)中的行为相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 2017-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        相关资源
        最近更新 更多