0
         public partial class ChatUserControl : System.Web.UI.UserControl
        {
            UserChatClass ucc = new UserChatClass();
            public ChatUserControl()
            {
                lblChatFriend = new Label();
                txtChatMessage = new TextBox();
                imgFriend = new Image();
                rpChatMessages = new Repeater();
            }
            public string ChatFriend { get { return this.lblChatFriend.Text; } set { this.lblChatFriend.Text = value; } }
            public string imgFriendUrl { get { return this.imgFriend.ImageUrl; } set { this.imgFriend.ImageUrl = value; } }
            public object rpChatDataSource { get { return this.rpChatMessages.DataSource; } set { this.rpChatMessages.DataSource = value; } }
            public Repeater rpChatMessagesToBind { get { return this.rpChatMessages; } set { this.rpChatMessages = value; } }
            }


        protected void Page_Load(object sender, EventArgs e) 
                { 
                    if (!IsPostBack) 
                    { 
ChatUserControl user1 = new ChatUserControl();
                    divChatUserControlCover.Controls.Add(user1);
                    } 
                } 
         private void BindUserControls()
                {                ChatUserControl user1 = divChatUserControlCover.Controls[1] as ChatUserControl;
                        user1.ChatFriend = row["username"].ToString();                    
                        user1.imgFriendUrl = "../../HttpImageHandler.jpg?username=" + row["username"].ToString(); 

                        DataSet dsCM = ucc.GetChatMessages(Session["username"].ToString(), row["username"].ToString());
                        user1.rpChatDataSource = dsCM;
                        user1.DataBindForRpChatMessagesToBind();
                        user1.Visible = true;

         }

    Master.aspx

    <div id="divChatUserControlCover" runat="server">

            </div>

OK、コードを編集して、プロパティを作成しました。rpChatMessages の DataBind メソッドを呼び出すにはどうすればよいですか? また、ページにユーザーコントロールが表示されません。どうして

4

3 に答える 3

0

最初のラベルを参照しようとしているのか、2番目のラベルを参照しようとしているのかわかりません。その2番目のラベルがあなたがすることができないならあなたはしなければならないchatMessage.でしょう

((Label)rpChatMessages.FindControl("chatMessage")) due to scope of controls. 

別のコンポーネント(つまりRepeater)内のコンポーネントを参照すると、子コンポーネントはドキュメント(暗黙this)に属しなくなり、コントロールに属します。

this.rpChatMessages { chatMessage }

于 2012-07-27T10:06:23.903 に答える
0

驚いたことに、ユーザー コントロールの子コントロールがインスタンス化されない理由がわかりました。これChatUserControl user1 = new ChatUserControl()は、子コントロールが初期化されていないためです。ユーザー コントロールの新しいインスタンスを作成する適切な方法は、次のとおりです。

ChatUserControl user1 = (ChatUserControl)Page.LoadControl("~/ChatUserControl.ascx");    
于 2012-07-27T15:39:21.837 に答える
0

これが正しい場合は、内部の 1 つのコントロールにを渡そうとしているだけだと思います。次のようにパブリック プロパティを宣言します。UserControl

ASCX コードビハインド

public string MyProperty
{
    get
    {
        return this.lbl.Text;
    }
    set
    {
        this.lbl.Text = value;
    }
}

UserControl への値の設定

private void BindUserControls() 
            { 
ChatUserControl user1 = divChatUserControlCover.Controls[1] as ChatUserControl; 
                    user1.MyProperty = row["username"].ToString(); 

ページ マークアップでの値の設定

<uc1:ChatUserControl MyProperty='<%# Eval("some field") %>' ...

編集 1

その行を削除します

public object rpChatDataSource { get { return this.rpChatMessages.DataSource; } set { this.rpChatMessages.DataSource = value; } 

代わりにメソッドを追加します

public void BindMyRepeaterOrWhatever(IEnumerable<Yourentity> data)
{
    this.myDataBoundControl.DataSource = data;
    this.myDataBoundControl.DataBind();
}

IEnumerable<Yourentity> dataforを変更することはできobject dataますが、厳密に型指定された列挙を渡すことができる場合はより良いでしょう

于 2012-07-27T10:10:01.430 に答える