如何像Table类一样抓取控件集合呢?

时间:2008-12-04 17:05:20

标签: c# .net user-controls

如何获取UserControl标记内的控件?

所以如果这是在Page:

<ME:NewControl ID="tblCustomList" runat="server">
// ... these controls will be used in my UserControl.aspx
</ME:NewControl>

如何在UserControl中访问这些控件?

例如,Table类执行此操作:

<asp:Table ID="tblNormal" runat="server">
  <asp:TableRow>
      <asp:TableCell>Thing 1</asp:TableCell>
      <asp:TableCell>Thing 2</asp:TableCell>
  </asp:TableRow>
</asp:Table>

当我这样做时,我收到一条错误,说我的UserControl“没有名为'TableRow'的公共属性:

<ME:NewControl ID="tblCustomList" runat="server">
  <asp:TableRow>
      <asp:TableCell>Thing 1</asp:TableCell>
      <asp:TableCell>Thing 2</asp:TableCell>
  </asp:TableRow>
</ME:NewControl>

我发现this sample有助于扩展Table类,但它不是完全我想要做的事情。

我还发现this description如何使用模板化控件,我不确定是否可以使用。

4 个答案:

答案 0 :(得分:1)

原来我只需要这样的东西:

public TableRow DTHeader { get; set; }

protected override void OnInit(EventArgs e)
{
    tblCollection.Rows.Add(DTHeader);
    base.OnInit(e);
}

然后在我的页面上使用它:

<ME:NewControl ID="tblCustomList" runat="server">
    <DTHeader>
        <asp:TableCell></asp:TableCell>
        //...
    </DTHeader>
</ME:NewControl>

答案 1 :(得分:0)

我不确定我是否100%理解这个问题。

但是,如果您使用名为Row的自定义控件,则可以将集合添加到主表用户控件。

您可以使用通用列表执行此操作。这应该使您能够像普通的aspx控件一样添加它们。

我这里没有代码示例,但我已多次完成。

答案 2 :(得分:0)

我不确定我理解你的问题。

您可以通过使用tblCustomList.Controls访问控件服务器端,然后您可以循环并添加到您的usercontrol。但同样,我不确定你在问什么。

答案 3 :(得分:0)

您引用的sample似乎是您要完成的任务 您是否在后面的代码中添加了以下内容?

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Permissions;

namespace Samples.AspNet.CS.Controls
{
    [AspNetHostingPermission(SecurityAction.Demand, 
        Level = AspNetHostingPermissionLevel.Minimal)]
    public sealed class CustomTableCreateControlCollection : Table
    {
        protected override ControlCollection CreateControlCollection()
        {
            // Return a new ControlCollection
            return new ControlCollection(this);
        }
    }
}