ASP.NET在转发器中加载用户控件

时间:2010-03-23 01:03:09

标签: asp.net

我有一个Repeater控件,可以加载我构建的自定义控件的实例。这个转发器看起来像这样:

<asp:Repeater ID="myRepeater" runat="server" OnLoad="myRepeater_Load">
  <HeaderTemplate>
    <table border="0" cellpadding="0" cellspacing="0">
  </HeaderTemplate>

  <ItemTemplate>
    <tr><td><my:CustomControl ID="myControl" runat="server" 
      OnLoad="myControl_Load" />
    </td></tr>
  </ItemTemplate>

  <FooterTemplate>
    </table>
  </FooterTemplate>
</asp:Repeater>

我通过myRepeater_Load事件处理程序绑定到Repeater。我的自定义控件用于在Repeater中呈现项目。因此,我试图在myControl_Load事件处理程序中设置自定义控件的属性。但是,我不知道如何在myControl_Load事件期间访问当前项目。

我可以在myControl_Load事件期间传递当前项目或访问当前项目吗?如果是这样,怎么样?

谢谢,

3 个答案:

答案 0 :(得分:3)

<asp:Repeater ID="rptrDemo" runat="server" OnItemDataBound="rptrDemo_ItemDataBound">
    <ItemTemplate>
        <demo:Sample runat="server" ID="sampleControl" />
    </ItemTemplate>
</asp:Repeater>


protected void rptrDemo_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.DataItem != null)
    {
        SampleControl sampleControl = (SampleControl)e.Item.FindControl("sampleControl");
        // do whatever
    }
}

答案 1 :(得分:0)

您需要使用转发器ItemDatabound事件。

答案 2 :(得分:0)

使用Repeater的OnItemDatabound事件

        void r_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            CustomControl ctl = (CutonControl)e.Item.FindControl("myControl");
        }
    }