你的用户控件是在DataList的模板中吗?如果是的话你需要在DataList的ItemDataBound或ItemCreated事件中先找到这个控件,然后才能设定属性。

解决方案 »

  1.   

    这样使用你的用户控件:
    1:先将用户控件拖到你的目标网页
    2:查看HTML代码,找到定义你的用户控件的标签,比如你的叫:
       <uc1:ReplyUC id="ReplyUC1" ...
    在你的服务端定义如下 
      protected ReplyUC ReplyUC1;3:然后,直接对ReplyUC1进行使用
      

  2.   

    是啊,我的用户控件是在<ItemTemplate>中啊,
      

  3.   

    private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");
    myReply.mytopicid = topicid;
    }错误还是为未将对象引用设置到对象的实例。
      

  4.   

    private void DataList1_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");
    myReply.mytopicid = topicid;
    }这样写也还是"错误还是为未将对象引用设置到对象的实例"帮帮帮忙啊,各位大侠,谢谢了
      

  5.   

    private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem){
    Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");
    if(myReply!=null)
    myReply.mytopicid = topicid;
    }
    }
      

  6.   

    大侠又出错了啊发生类型为 System.StackOverflowException 的异常。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.StackOverflowException: 发生类型为 System.StackOverflowException 的异常。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: 
    [StackOverflowException: 发生类型为 System.StackOverflowException 的异常。] 
      

  7.   

    <asp:datalist id="DataList1" runat="server" Width="733px">
    <HeaderTemplate>
    <FONT face="宋体">
    <TABLE id="Table2" width="100%" align="center" border="1">
    <TR>
    <TD width="20%">&nbsp;作者</TD>
    <TD width="79%"><B>问题
    <asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"topic")%>'>Label</asp:Label></B></TD>
    </TR>
    </TABLE>
    </FONT>
    </HeaderTemplate>
    <ItemTemplate>
    <TABLE id="Table8" width="100%" align="center" border="1">
    <TR>
    <TD width="20%">作者</TD>
    <TD width="80%"><B><%# DataBinder.Eval(Container.DataItem,"title")%></B>
    <asp:Label id=Label3 runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"topicid")%>' Visible="False">
    </asp:Label></TD>
    </TR>
    <TR>
    <TD width="20%"></TD>
    <TD width="80%">日期<%# DataBinder.Eval(Container.DataItem,"addtime")%></TD>
    </TR>
    <TR>
    <TD width="20%"></TD>
    <TD width="80%"><%# DataBinder.Eval(Container.DataItem,"content")%><FONT face="宋体"></FONT></TD>
    </TR>
    <TR>
    <TD width="20%"></TD>
    <TD width="80%">
    <asp:Button id="Button1" runat="server" Text="Button" CommandName="first"></asp:Button></TD>
    </TR>
    </TABLE>
    <uc1:ReplyUC id="ReplyUC1" runat="server"></uc1:ReplyUC>
    </ItemTemplate>
    <AlternatingItemTemplate>
    <FONT face="宋体"></FONT>
    </AlternatingItemTemplate>
    </asp:datalist>
      

  8.   

    这是后台的
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    topicid = int.Parse(Request.Params["topicid"]);

    if (!IsPostBack)
    {
    Forum.Component.ForumDB myForum = new Forum.Component.ForumDB();
    DataList1.DataSource = myForum.GetTopicDetail(topicid);
    DataList1.DataBind();
    }

    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.DataList1.ItemCommand += new System.Web.UI.WebControls.DataListCommandEventHandler(this.DataList1_ItemCommand);
    this.DataList1.ItemDataBound += new System.Web.UI.WebControls.DataListItemEventHandler(this.DataList1_ItemDataBound);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void DataList1_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
    {
    switch(e.CommandName)
    {
    case "first":
    Label myLabel = (Label)e.Item.FindControl("Label2");
    int replyid = int.Parse(myLabel.Text);
    Response.Write(replyid);
    Response.End();
    break;

    }
    }
    private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
    {
    Forum.UserControl.ReplyUC myReply = (Forum.UserControl.ReplyUC)e.Item.FindControl("ReplyUC1");
    if(myReply!=null)
    {
    myReply.mytopicid = topicid;
    }
    } }
      

  9.   

    你在aspx页面上有没有用 <%@Register TagPrefix="uc1" TagName="ReplyUC" src="replyuc.ascx"%>这样的方法注册过这个用户控件?如果注册过,那么不设置别的属性时这个用户控件能否正常显示?
      

  10.   

    从你的代码中看不出有什么问题,其实有一个更简单的办法可以实现你要求的功能,那就是直接在你的用户控件中把mytopicid的值设为 int.Parse(Request.Params["topicid"]);,而不用把它设成一个公共属性,在包含页上再赋值。
      

  11.   

    在调用页面上你什么都不用写,就象现在的<uc1:ReplyUC id="ReplyUC1" runat="server"></uc1:ReplyUC>就行,值得说明一点是,在用int.Parse()方法转换 Request.Params["topicid"]的值时,必须做严格的验证,否则如果它是空值或不是一个可以转换为int的字符串,那会出错。
      

  12.   

    谢谢 webdiyer(陕北吴旗娃)
    谢谢您教我换一种思路做,这个问题我昨天做了一天加一晚上,也没想到换一种思路.
    再次说声谢谢了.