ASP.NET Repeater用户控件数据源

时间:2011-09-29 12:17:53

标签: c# asp.net user-controls

我有一个包含转发器的用户控件。似乎数据无法分配给它的DataSource属性,我尝试了几个不同的数据源,但显示以下错误:(我已调试它,数据源中有数据项)

Object reference not set to an instance of an object

这是转发器的aspx:

<asp:Repeater ID="repeater1" runat="server" >
    <HeaderTemplate>
        <ul>
    </HeaderTemplate>
        <ItemTemplate>
            <li>
                <%# Eval("Name") %>
            </li>
        </ItemTemplate>
    <FooterTemplate>
            </ul>
    </FooterTemplate>
</asp:Repeater>

我在要显示转发器的文件后面的代码中创建了一个用户控件的实例 - 我无法输入repeater1.DataSource并在该页面中分配它,所以我向用户控件添加了一个属性将IEnumerable作为数据源。

为什么这不起作用?

2 个答案:

答案 0 :(得分:3)

您应该使用DataBind()方法执行此类操作,如下所示:

public override void DataBind()
{
   this.repeater.DataSource = ...
   this.repeater.DataBind();
   ...
}

因此它会在父页面调用Page.DataBind()时绑定

Control.DataBind Method

  

使用此方法将数据从源绑定到服务器控件。这个   通过数据库检索数据集后,通常使用方法   查询。大多数控件自动执行数据绑定,这意味着   您通常不需要显式调用此方法。

答案 1 :(得分:2)

试试这个:在用户控件中,在转发器所在的位置,在OnLoad()方法中

这样做:

 repeater1.DataSource = MyIEnumerableProperty;
 repeater1.DataBind();