0

我有一个包含数据列表的用户控件,我想根据用户控件所在的页面将数据列表的数据源设置为不同的东西。

所以,我认为我需要做的是公开数据列表的公共属性,它将获取数据源并设置它,如下所示:

public datasource UserDataSource
{
get { return DataList1.DataSource; }
set { DataList1.DataSource = value; }
}

但上述显然不起作用。然后我会这样称呼它:

MyUserControl.UserDataSource = datasourcename;

然后以某种方式对用户控件内的数据列表进行数据绑定。

显然我在这里有点不合时宜,但希望我能做到这一点。谢谢你的帮助。

4

2 回答 2

1

您需要先使用查找控制方法找到您的数据列表,然后分配数据源,如...

DataList dl = (DataList)yourLoadedusercontrol.FindControl("yourDatalist");
    dl.DataSource = yourdatasource;
于 2009-10-28T04:43:47.490 回答
1

我知道您已经接受了答案,但我觉得我必须添加我的想法:

您最初的想法是正确的-您只需要在设置数据源后调用 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);

在您的用户控件中:

public void LoadData(IList<CustomClass> data){
  this.datalist1.datasource = data;
  this.datalist1.databind();
}
于 2009-10-28T14:43:57.550 回答