Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Retrieve the values from textbox which is dynamically created using C#

I have created few textbox dynamically while coding in the flow I have provided unique id for each and I have hard coded some values to all the text boxes using C#.

Now on click of button am trying to retrieve the values from the textbox for which I have used the below code, but its throwing an exception as OBJECT REFERENCE NOT SET TO INSTANCE OF AN OBJECT.

Please look at the below code, I have tried both the things but still am not getting.
Please help me out.
Thanks

protected void btnPltGrap_onclick(object sender, EventArgs e)
{
    //spny is my stack panel and txtX0 is my of the text box id
    //Below is the 1st Try        
     TextBox tb = new TextBox(); 
     tb= (TextBox)Master.FindControl("spnY").FindControl("txtX0");
     string strx = tb.Text;
      //Below is the 2nd Try 
     string strx = (spnY.FindControl("txtX0") as TextBox).Text;
 }

Thanks

Am trying to use view state as per you told that i shlould recreate the controls ones again but am getting exception as Invalid Arguments. please go have a look.

protected void btnSet_onClick(object sender, EventArgs e)
 {
    Table tblMainY = new Table();
    TableRow tblRow = new TableRow();
    tblMainY.Controls.Add(tblRow);
    TableCell tblCel = new TableCell();
    TextBox txtdyn = new TextBox();
    txtdyn.Text = "1";
    txtdyn.ID = "txtY01"; 
    txtdyn.Width = 50;
    tblCel.Controls.Add(txtdyn);
    tblRow.Controls.Add(tblCel);    
    splY.Controls.Add(tblMainY);
    ViewState["temptbl"] = tblMainY
}
protected void btnPltGrap_onclick(object sender, EventArgs e)
{
    splY.Controls.Add(ViewState["Temptbl"]);
}
Please help me out
like image 522
Rakesh Avatar asked Nov 27 '25 16:11

Rakesh


1 Answers

I've had the same problem in the past.

What I did was give the dynamically-added control an ID, and made sure it retained that ID also on postback.

Once the postbacked control has the same ID as as before, Microsoft did magic and refilled the controls with the pre-postback values.

Read out this code once

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            this.NumberOfControls = 0; //very first time when page is loaded, value will be 0
        else
            this.createControls(); //if it is postback it will recreate the controls according to number of control has been created
    }

    //this is the base of this, it will hold the number of controls has been created, called properties
    protected int NumberOfControls 
    {
        get { return (int)ViewState["NumControls"]; }
        set { ViewState["NumControls"] = value; }
    }

    //it will create the controls 
    protected void createControls()
    {
        int count = this.NumberOfControls;
        for (int i = 0; i < count; i++) //loop for the total number of control.
        {
            TextBox tx = new TextBox(); //creating new control
            tx.ID = "ControlID_" + i.ToString(); //in your solution you are giving static id, don't do that, assign id number dynamically, it will help you further, if you want to manipulate the controls for some other use
            //Add the Controls to the container of your choice
            form1.Controls.Add(tx);
        }
    }

    //add new control
    protected void addSomeControl()
    {
        TextBox tx = new TextBox();
        tx.ID = "ControlID_" + NumberOfControls.ToString();
        form1.Controls.Add(tx);
        this.NumberOfControls++; //increment the number of control
    }

    protected void AddBtn_Click(object sender, EventArgs e)
    {
        addSomeControl(); 
    }
like image 73
Mogli Avatar answered Nov 30 '25 07:11

Mogli



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!