自己写了个复合组件,其实就是扩展了一下DataList.
然后在A.aspx中动态调用组件,绑定数据,并将其添加到页面中. ( LoadControl 方法 )
-----------------------------------------------------------------------------现在的问题是,因为是动态加载组件,所以在页面回发时就必须再重新加载一次,
这样的话原来组件绑定的数据就丢失了.我是想知道有没有什么方法(不用单独去保存数据源),能让它像普通的DataList组件那样,
只要在 !IsPostBack 的时候绑定一次数据,以后就不用再重新绑定了?注意此组件是动态添加的...
相关代码
----------------------------------------------
UserDataSet.T_UserBaseInfoDataTable dt = null;
protected void Page_Load(object sender, EventArgs e)
{
        
   if (!IsPostBack)
   {
       UserDataSetTableAdapters.T_UserBaseInfoTableAdapter ppp = new UserDataSetTableAdapters.T_UserBaseInfoTableAdapter();
       dt = ppp.GetData(string.Empty);           
   }   PageControls_Page_Default aaa = this.LoadControl("~/PageControls/Page_Default.ascx") as PageControls_Page_Default;           
           
   aaa.datalist.DataSource = dt;
   aaa.datalist.DataBind();
   this.form1.Controls.Add(aaa);
}

解决方案 »

  1.   

    能让它像普通的DataList组件那样,
    只要在 !IsPostBack 的时候绑定一次数据,以后就不用再重新绑定了
    ————————————————————————————————————————
    asp.net内置的DataList有这个功能吗?举个例子讲解一下到底想要什么样子的功能?
      

  2.   

    A.aspx
    ----------------------
    <asp:datalist id="d1" runat="server">
    <itemTemplate>
      ...
    </itemTemplate>
    </asp:datalist>
    <asp:button id="btn1" runat="server" text="Click" onclick="btnclick"/>----------------------
    A.cs
    ----------------------
    public void page_load(object sender ...)
    {
        if(!ispostback)
        {
            System.Data.DataTable dt = GetDataTable();
            this.d1.datasource = dt;
            this.d1.databind();
        }
    }public void btnclick(object sender ...)
    {
    }--------------------------------按照上面的写法,当页面按钮点击时,DataList中绑定的数据将保持原样无变化.但我现在想在代码中动态添加组件,并实现以上功能(当页面按钮点击时,DataList中绑定的数据将保持原样无变化).
      

  3.   

    既然a.aspx中的代码是那样写的,为什么把Page_Default.ascx中的数据绑定写到外部?使用这个用户控件的外部控件应该“根本不管、不知道子控件内部细节”,就像aspx自己管理自己一样,ascx也要完全一样写代码。另外你要给你的aaa设置ID属性,这个属性不应随便省略。
      

  4.   

    自定义控件大多数错误大多数都是“职责不分”造成的。有的人让控件去耦合外部控件的细节,有的人让外部去耦合控件内部的细节,就像你的页面去访问aaa.datalist,这是设计上过分聪明造成结构不稳固、行为比较扭曲。如果你将控件作为可以随时改变内部或者外部细节的插件行为去设计,将来使用维护等都会比较顺利。
      

  5.   

    最终的页面代码应该是这样的:UserDataSet.T_UserBaseInfoDataTable dt = null;
    protected void Page_Load(object sender, EventArgs e)
    {
       PageControls_Page_Default aaa = this.LoadControl("~/PageControls/Page_Default.ascx") as PageControls_Page_Default;      
       aaa.ID="myTestAscx";     
       this.form1.Controls.Add(aaa);
       if (!IsPostBack)
       {
           UserDataSetTableAdapters.T_UserBaseInfoTableAdapter ppp = new UserDataSetTableAdapters.T_UserBaseInfoTableAdapter();
           dt = ppp.GetData(string.Empty);           
           aaa.DataSource = dt;
           aaa.DataBind();
       }
    }