0
votes

this is my code and i want to know how i add some code to delete dynamic control(textbox and button) when user click delete button. Please help me T_T

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Globalization;

public partial class _Default : System.Web.UI.Page {

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        CreateTextBox();
    }
    else
    {
        Session["arrayTextBox"] = null;
        Session["arrayButton"] = null;
    }
}

protected void CreateTextBox()
{
    List<TextBox> arrayTextBox = new List<TextBox>();

    List<Button> arrayButton = new List<Button>();

    if (TextBox1.Text != "")
    {            
        if (Session["arrayTextBox"] != null)
        {
            arrayTextBox = (List<TextBox>)Session["arrayTextBox"];
            arrayButton = (List<Button>)Session["arrayButton"];
        }

        TextBox aTextBox = new TextBox();

        aTextBox.ID = "aTextBox" + arrayTextBox.Count.ToString();
        aTextBox.Text = TextBox1.Text;

        Button ButtonDelete = new Button();
        ButtonDelete.ID = "ButtonDelete" + arrayButton.Count.ToString();
        ButtonDelete.Text = "Delete";

        //if (TextBox2.Text != "")
        //{
        //    String red = TextBox2.Text.ToString().Substring(0, 2);
        //    String green = TextBox2.Text.ToString().Substring(2, 2);
        //    String blue = TextBox2.Text.ToString().Substring(4, 2);

        //    int r = int.Parse(red, NumberStyles.AllowHexSpecifier);
        //    int g = int.Parse(green, NumberStyles.AllowHexSpecifier);
        //    int b = int.Parse(blue, NumberStyles.AllowHexSpecifier);

        //    aTextBox.BackColor = System.Drawing.Color.FromArgb(r, g, b);
        //}

        arrayTextBox.Add(aTextBox);
        arrayButton.Add(ButtonDelete);

        for(int i=0;i<arrayTextBox.Count;i++)
        {              
            PlaceHolder1.Controls.Add(arrayTextBox[i]);
            PlaceHolder1.Controls.Add(arrayButton[i]);
            PlaceHolder1.Controls.Add(new LiteralControl(@"<br />"));
        }

        //ButtonDelete.Click += new EventHandler(ButtonDelete_Click);


        Session["arrayTextBox"] = arrayTextBox;
        Session["arrayButton"] = arrayButton;

        TextBox1.Text = "";
        //TextBox2.Text = "";
    }


}

}

2

2 Answers

0
votes

foreach the arrayTextBox and get TextBox, then use PlaceHolder1.Controls.Remove(Textbox)

0
votes

You can use the code below. Note: I used CommandArgument of the button to store the id of corresponding textbox and then use Page.Controls.Remove in the btn click event:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        CreateTextBox();
    }
    else
    {
        Session["arrayTextBox"] = null;
        Session["arrayButton"] = null;
    }
}

protected void ButtonDelete_Click(object Sender, EventArgs e)
{
    Button btn = Sender as Button;
    if(btn != null)
    {
        String szTextControlID = btn.CommandArgument;
        Control ctl = Page.FindControl(szTextControlID);
        Page.Controls.Remove(ctl);
        Page.Controls.Remove(btn);
    }
}

protected void CreateTextBox()
{
    List<TextBox> arrayTextBox = new List<TextBox>();

    List<Button> arrayButton = new List<Button>();

    if (TextBox1.Text != "")
    {            
        if (Session["arrayTextBox"] != null)
        {
            arrayTextBox = (List<TextBox>)Session["arrayTextBox"];
            arrayButton = (List<Button>)Session["arrayButton"];
        }

        TextBox aTextBox = new TextBox();

        aTextBox.ID = "aTextBox" + arrayTextBox.Count.ToString();
        aTextBox.Text = TextBox1.Text;

        Button ButtonDelete = new Button();
        ButtonDelete.ID = "ButtonDelete" + arrayButton.Count.ToString();
                ButtonDelete.CommandArgument = aTextBox.ID;
        ButtonDelete.Text = "Delete";
                ButtonDelete.Click += new EventHandler(ButtonDelete_Click);

        //if (TextBox2.Text != "")
        //{
        //    String red = TextBox2.Text.ToString().Substring(0, 2);
        //    String green = TextBox2.Text.ToString().Substring(2, 2);
        //    String blue = TextBox2.Text.ToString().Substring(4, 2);

        //    int r = int.Parse(red, NumberStyles.AllowHexSpecifier);
        //    int g = int.Parse(green, NumberStyles.AllowHexSpecifier);
        //    int b = int.Parse(blue, NumberStyles.AllowHexSpecifier);

        //    aTextBox.BackColor = System.Drawing.Color.FromArgb(r, g, b);
        //}

        arrayTextBox.Add(aTextBox);
        arrayButton.Add(ButtonDelete);

        for(int i=0;i<arrayTextBox.Count;i++)
        {              
            PlaceHolder1.Controls.Add(arrayTextBox[i]);
            PlaceHolder1.Controls.Add(arrayButton[i]);
            PlaceHolder1.Controls.Add(new LiteralControl(@"<br />"));
        }




        Session["arrayTextBox"] = arrayTextBox;
        Session["arrayButton"] = arrayButton;

        TextBox1.Text = "";
        //TextBox2.Text = "";
    }


}