我正在尝试构建一个 ASP.net 用户控件,该控件使用 Repeater 来迭代 ObjectDataSource 中需要传递给用户控件的多个项目。我不确定如何传递对象数据源。有人知道怎么做吗?

有帮助吗?

解决方案

可以创建在用户控件的属性并把它传递给中继器。

public class CustomUserControl
{
  private Repeater repeater;

  public ObjectDataSource DataSource
  {
    get
    {
      return this.repeater.DataSource;
    }
    set
    {
      this.repeater.DataSource = value;
    }
  }
}

其他提示

以下是执行此操作的粗略步骤(未经测试)。

  • 列表使您的用户控件成为数据绑定控件。看看这篇文章看一个例子 http://geekswithblogs.net/mnf/articles/92205.aspx.

  • 在使用用户控件的页面中,以声明方式或以代码方式将 DataSourceId 属性设置为对象数据源。

    <uc1:YourUserControl DataSourceId="YourObjectDataSourceID"></uc1:YourUserControl>

  • 列表项 通过声明性绑定表达式将转发器绑定到内部 DataSourceId 属性。

    <asp:repeater DataSourceId='<%# DataSourceId %>'></asp:repeater>

如果你让你控制CompositeDataBoundControl继承

[ToolboxData("<{0}:TopNav runat=server></{0}:TopNav>")]
public class TopNav : CompositeDataBoundControl

可以将的DataSourceID分配给它。

<uc1:TopNav ID="YUITopNav1" runat="server" DataSourceID="ObjectDataSource1"  />

然后在您控制实现

    protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
    {
        this.Repeater1.DataSource = dataSource;
        this.Repeater1.DataBind();
    }

其中数据源是数据从未来的ObjectDataSource

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top