代码之家  ›  专栏  ›  技术社区  ›  somacore

从用户控件内部设置datalist.datasource-asp.net c#

  •  0
  • somacore  · 技术社区  · 15 年前

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

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

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

    但是上面的显然不起作用。我会这样称呼它:

    MyUserControl.UserDataSource = datasourcename;
    

    然后以某种方式将数据列表绑定到用户控件中。

    很明显,我有点脱离我的元素,但希望我能让这个工作。谢谢你的帮助。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Muhammad Akhtar    15 年前

    您需要先使用find control方法查找数据列表,然后像这样分配数据源…

    DataList dl = (DataList)yourLoadedusercontrol.FindControl("yourDatalist");
        dl.DataSource = yourdatasource;
    
        2
  •  1
  •   Dan Appleyard    15 年前

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

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

    例子:

    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();
    }