我把一个用户控件放在一个DATALIST里面,现在要对用户控件动态传值,应该怎么做?请大家指点!!!

解决方案 »

  1.   

    没人?!哦,那自己回答了。Form:WebForm1.aspx<%@ Register TagPrefix="tagPrefix1" TagName="tagName1" Src="WebUserControl1.ascx"%>
     ...
    <asp:DataList id="DataList1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server">
      <ItemTemplate>
        <tagPrefix1:tagName1 id="pp1" runat="server" u_tmp=<%# DataBinder.Eval(Container.DataItem,"rowID")%>></tagPrefix1:tagName1>
      </ItemTemplate>
    </asp:DataList>
    ...
    //这里的DATALIST绑定了一个DATASET对象
    WebUserControl1.ascx.cs...
      public string u_tmp;
    ...
      private void Page_Load(object sender, System.EventArgs e)
      {
        this.Label1.Text=this.u_tmp;
      }
    ...昨天这样值传不过去,但是今天写成这个样子又可以传了,原因还没有找出来。
      

  2.   

    貌似跟优先级有关
    不用Page_Load改成自定义方法应该就没问题了。当然调用的时候也需要改一下方式private string _utmp
    public string U_Tmp
    {
    get{return _utmp;}
    set{_utmp=value;}
    }
    public string bind()
    {
       this.Label1.Text=U_Tmp;
    }
      

  3.   

    顺序应该是
    页面 Page_Lode,控件Page_Load,楼上说的ms有道理.
      

  4.   

    http://community.csdn.net/Expert/TopicView.asp?id=5030009
      

  5.   

    对于行,先执行page_load,后执行databind()。
      

  6.   

    一种只看眼前的解决方法是:可以给你的用户控件定义:
      pulic void RefreshParams()
      {
        this.Label1.Text=this.u_tmp;
      }然后你在DataList的 itemDataBound 中执行这个用户控件的RefreshParams()方法。
    控件按说应该在 CreateChildControls中设置子控件,不应该在page_load中处理。这时候,用户控件应该这样定义:  private string _u_tmp;  public string u_tmp;
      {
         get{ return _u_tmp; }
         set{ this.ChildControlsCreated=false; _u_tmp=value;}
      }  protected void CreateChildControls()
      {
        base.CreateChildControls();
        this.Label1.Text=this.u_tmp;
      }只有到OnPrerender的时候才给 this.Label1.Text 传值,那么早给具体控件赋值是不对的,当数据有多条赋值/更新语句的时候,会引起控件反复被刷新。
      

  7.   

    对,我传值后,又把页面刷新了,
    if(!this.IsPostBack)就好了。
    谢谢大家。