2009-06-24 106 views
0

我想构建一个ASP.net用户控件,它使用Repeater遍历ObjectDataSource中的一些项目,我需要将其传递给用户控件。虽然我不确定如何传递对象数据源。有人知道怎么做吗?ASP.Net用户控件

回答

3

您可以在用户控件中创建一个属性并将其传递给中继器。

public class CustomUserControl 
{ 
    private Repeater repeater; 

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

想知道,这可以通过将属性数据类型的`Object`如进行更加灵活的[Repeater.DataSource](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.repeater.datasource.aspx)是 – User 2012-09-06 04:43:20

+0

是的。 (11个更多的字符去...) – 2012-09-10 19:48:34

0

如果你让你控件继承从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

1

未来下面是粗糙的步骤来做到这一点(未经测试)。

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

  • 在使用您的usercontrol的页面中,声明性地或以代码形式将DataSourceId属性设置为您的对象数据源。

    < UC1:YourUserControl的DataSourceID = “YourObjectDataSourceID”> </UC1:YourUserControl>

  • 列表项经由声明性绑定表达绑定您的中继器到内部DataSourceID属性。

    < ASP:中继器的DataSourceID = '<%#的DataSourceID%>'> </ASP:中继器>