2011-07-20 12 views
0

私はn個のパネルを作成する中継器を持っています。私は各パネルに異なるコントロールを動的に追加しようとしています。私は間違った方法でこれについてよく考えているかもしれません。動的に作成されたパネルにコントロールを動的に追加するにはどうすればよいですか?

私のコードは、多かれ少なかれです:

.aspxの:

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <% Response.Write("<asp:panel runat=\"server\" id=\"uxPanel_"); %> 
     <%# DataBinder.Eval(Container.DataItem, "TableId")%><% Response.Write("\"></asp:panel>"); %> 

    </ItemTemplate> 
</asp:Repeater> 

は.cs:

public partial class class1: System.Web.UI.Page 
{ 
    DataSet ds= null; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    GetRecords(1,1); 
} 

protected void GetRecords() 
{ 
    ds= dal.LoadRecords(); 

    this.Repeater1.DataSource = ds.Tables[0]; 
    this.Repeater1.DataBind(); 


    Literal lit = new Literal(); 
    lit.Text = "Some text"; 
    this.FindControl("uxPanel_1").Controls.Add(lit);   


} 

}

ただ、この例で明らかになるように「DAL。 LoadRecords "は単にDBからいくつかのレコードを取得するメソッドへの呼び出しです。

私の問題は、パネルを最初に追加する方法だと思いますが、これは一意の名前を付ける簡単な方法のようです。

任意のポインタ?

ありがとうございました

+0

これを投稿して以来、これを行うもっと良い方法は、ページ上に1つのパネルを作成し、必要に応じてパネルを作成し、コントロールを追加して元の静的パネルに追加することです。これはより適切なアプローチですか? – Curtis

+0

<%Response.Write( "この行は、Panelコントロールによって生成されたDIV要素を作成しません.... –

答えて

0

これまでの回答者によると、これは危険に満ちています!

する必要がある場合:私はリピータのアプローチを完全に止めなければなりません。

コンテナパネルまたはプレースホルダを作成し、コード内にContainerPanel.Controls.Add(newPanel)を使用してパネルを動的に追加します。

必要に応じて、あなたの子供の「パネル」がUserControlになる可能性があります。

ポストバック時にダイナミックコントロールを再生成する必要があることに注意してください。

0

ポインター?はい:コントロールを動的に追加しないでください!

動的にコントロールを追加するとオーバーヘッドが増え、ビューステートで問題が発生します。通常、時間と頭痛の価値はありません。

myPanel.Visible=true; 
    myOtherPanel.Visible = false; 
    myTogglePanel.Visible = ! myTogglePanel.Visible; //toggle it's visibility 

このアプローチでは、はるかに簡単:

パネルだけでなく、リテラル、プレースホルダ、および他のすべてのASP.NETコントロールは、目に見えるあなたがそうのように、オンとオフを切り替えることができますプロパティを持っています。

+0

はい、このページへの今後の訪問者にも直接質問に答えることは悪い考えではありません。 –

関連する問題