2014-01-20 40 views
1

我正在設計一個web表單..這個想法就像設計一個論壇 - 這裏 - 有一個主要的帖子主體(就像這個問題即時編寫)並且對這個問題有一些答覆(比如這個問題將會被回答)。Visual 2012 C#ASP.net在程序控制下添加控件

我在把下彼此

答覆意見我已經作出了回覆按鈕,當按壓它有問題,該代碼執行:

TextBox tb = new TextBox(); 
Panel3.Controls.Add(tb); 

panel3是主體下一個面板,並且textBox是回覆評論的字段,並且我希望在該面板中插入與該按鈕一樣多的文本框。

當我點擊了第二或第三或....倍,目前的文本框中越過前面的一個,它在它不會去

我怎樣才能定位每個以前的文本框下?

+0

新的文本框會擦除上一個或重疊嗎? – Plue

回答

1

這與CSS或HTML問題有關。

The idea is to add <div> to contain the TextBox before they are added to the panel. 

下面是範例代碼:

public partial class _Default : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      ViewState["Counter"] = 0; 
     } 
     else 
     { 
      //Sync ViewState Info to maintain the state 
      List<string> texts = new List<string>(); 

      //The dynamic textbox values are captured from Request.Form 
      foreach (string key in Request.Form.Keys) 
      { 
       if (key.Contains("ctrlsuper")) 
       { 
        texts.Add(Request.Form[key]); 
       } 
      } 
      Texts = texts; 
     } 
    } 

    protected void btnAdd_Click(object sender, EventArgs e) 
    { 
     //Rerender the textboxes to UI and add one more new empty textbox. 
     for (int i = 0; i <= Convert.ToInt32(ViewState["Counter"]); i++) 
     { 
      HtmlGenericControl div = new HtmlGenericControl("div"); 
      TextBox tb = new TextBox(); 
      tb.ID = "ctrlsuper" + i.ToString(); 

      //Refresh the textbox text according to its previous value. 
      if (Texts.Count > 0 && i < Texts.Count) 
      { 
       tb.Text = Texts[i]; 
      } 

      div.Controls.Add(tb); 
      pnlControls.Controls.Add(div); 
     } 

     ViewState["Counter"] = Convert.ToInt32(ViewState["Counter"]) + 1; 
    } 

    public List<string> Texts 
    { 
     get 
     { 
      if (ViewState["Texts"] == null) 
      { 
       return new List<string>(); 
      } 
      else 
      { 
       return ViewState["Texts"] as List<string>; 
      } 
     } 
     set 
     { 
      ViewState["Texts"] = value; 
     } 
    } 
} 

的ASPX:

<asp:Panel runat="server" ID="pnlControls"> 
    </asp:Panel> 

    <asp:Button runat="server" ID="btnAdd" Text="Add" OnClick="btnAdd_Click" /> 

希望它能幫助。

+0

THANKS ALOT ...但我仍然有一個問題,在部分div.Controls.Add(新的TextBox());我把這個改爲: >>>>>>>> TextBox tb = new TextBox(); div.Controls.Add(tb); tb.text = TextBox2.text;其中textbox2是一個臨時文本框來保存文本,然後把它放在div中生成的新的tb ....問題是當我創建第一個文本tb,第二個創建tb的文本更改第一個等.. 。我能解決它嗎? – user3215839

+0

是的,這是因爲當您將第一個文本框的文本分配給第二個文本框時,它會將第一個文本框的引用傳遞給第二個文本框。爲了防止這種情況,我們需要克隆這個值。而不是分配tb.Text = TextBox2.Text,您可以通過tb.Text = TextBox2.Text.Clone()分配它。 希望它有幫助。 – Hatjhie

+0

再次感謝您的答覆,但我得到「不能隱式轉換類型」對象「的字符串的錯誤...」 – user3215839

相關問題