从usercontrol内部设置datalist.datasource-asp.net c#

从usercontrol内部设置datalist.datasource-asp.net c#,c#,asp.net,data-binding,user-controls,datalist,C#,Asp.net,Data Binding,User Controls,Datalist,我有一个包含datalist的usercontrol,我想根据usercontrol所在的页面将datalist的数据源设置为不同的内容 因此,我认为我需要做的是公开datalist的公共属性,该属性将获取数据源并进行设置,如下所示: public datasource UserDataSource { get { return DataList1.DataSource; } set { DataList1.DataSource = value; } } 但上述方法显然不起作用。我会这样称呼它

我有一个包含datalist的usercontrol,我想根据usercontrol所在的页面将datalist的数据源设置为不同的内容

因此,我认为我需要做的是公开datalist的公共属性,该属性将获取数据源并进行设置,如下所示:

public datasource UserDataSource
{
get { return DataList1.DataSource; }
set { DataList1.DataSource = value; }
}
但上述方法显然不起作用。我会这样称呼它:

MyUserControl.UserDataSource = datasourcename;
然后以某种方式将数据列表数据绑定到usercontrol中


显然,我有点不适应这里的环境,但希望我能让它工作起来。谢谢您的帮助。

您需要使用find control方法首先查找数据列表,然后分配数据源,如

DataList dl = (DataList)yourLoadedusercontrol.FindControl("yourDatalist");
    dl.DataSource = yourdatasource;

我知道你已经接受了答案,但我觉得我必须补充我的想法:

您最初的想法是正确的-您只需要在设置数据源之后调用datalist的databind方法。我真的不觉得做上述方法是最好的方法。实际上,您应该有一个方法或writeonly属性(就像您所做的那样),它可以获取自定义对象的IList或IEnumerable,并将其直接绑定到数据列表。包含此用户控件的页面或控件不应知道数据控件的类型。如果将其从Datalist更改为Repeater或GridView,则必须在绑定到用户控件的任何位置更改它

例如:

IList<CustomClass> results = new List<CustomClass>(); //you would load your collection from your database
this.myUserControl.LoadData(results);
IList results=new List()//您将从数据库中加载收藏
this.myUserControl.LoadData(结果);
在用户控件中:

public void LoadData(IList<CustomClass> data){
  this.datalist1.datasource = data;
  this.datalist1.databind();
}
public void LoadData(IList数据){
this.datalist1.datasource=数据;
this.datalist1.databind();
}

用户控件将在不同的页面上显示相同类型的数据,还是完全随机和不同的内容?我不确定您的问题是什么。您不确定如何自动绑定数据吗?它将在每个页面上显示相同类型的数据,只是来自不同的查询。接受答案后出现了什么问题?