【问题标题】:Set a datalist.datasource from inside a usercontrol - asp.net c#从用户控件内部设置 datalist.datasource - asp.net c#
【发布时间】:2009-10-27 20:18:19
【问题描述】:

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

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

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

但上述显然行不通。然后我会这样称呼它:

MyUserControl.UserDataSource = datasourcename;

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

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

【问题讨论】:

  • 用户控件是在不同的页面上显示相同类型的数据还是完全随机和不同的东西?
  • 我不确定您的问题是什么。不知道怎么自动绑定数据?
  • 它将在每个页面上显示相同类型的数据,只是来自不同的查询。
  • 接受答案后有什么问题?

标签: c# asp.net data-binding user-controls datalist


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多