Solved

Retain values from dynamically created table with controls

Posted on 2004-11-01
715 Views
Last Modified: 2008-03-03
I have a WebControls.Table that users are able to Add rows to using an Add button.  When the button is clicked, a new table row is created with several controls.  I am using a session variable to retain an arraylist of my table rows so that I can recreate the table on postback.  My issue is, that although the table is recreated, any data that my user may have typed in is gone - it appears the ViewState is not being maintained.

Here is some of my code:
            private void BtnAddBM_Click(object sender, System.EventArgs e)
            {              
                  //Add row table - get existing rows
                  newRows = (ArrayList)Session["newRows"];

                  //set rcount to initial row id - we have two header rows, so first row is 2
                  int rcount = 2 + newRows.Count;

                  //Create a new row
                  TableRow newRow = new TableRow();
                  newRow.ID = "nr" + rcount.ToString();
                  //Add cells
                  newRow.Cells.Add(new TableCell());
                  newRow.Cells.Add(new TableCell());
                  newRow.Cells.Add(new TableCell());
                                                .
                                                .
                                                .
                  //Add the controls to the new row
                  newRow.Cells[0].Controls.Add(txtBBM);
                  newRow.Cells[0].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[1].Controls.Add(ddlCurEmpTit);
                  newRow.Cells[1].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[2].Controls.Add(ddlFETit);
                  newRow.Cells[2].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[3].Controls.Add(cbAI);
                  newRow.Cells[3].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[4].Controls.Add(cbVC);
                  newRow.Cells[4].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[5].Controls.Add(cbII);
                  newRow.Cells[5].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[6].Controls.Add(cbOI);
                  newRow.Cells[6].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[7].Controls.Add(cbAc);
                  newRow.Cells[7].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[8].Controls.Add(txtBBMOth);
                  newRow.Cells[8].HorizontalAlign = HorizontalAlign.Center;

                  //Store the new row in the array list
                  newRows.Add(newRow);

                  //Store the updated array list in session object
                  Session["newRows"] = newRows;

                  //Add all the rows created dinamicly to the table
                  foreach(TableRow currentRow in newRows)
                  {
                        Table2.Rows.Add(currentRow);
                  }

                                 }

How can I retain the values in these controls between PostBacks?

Thanks,

Dave

0
Question by:a222493
    3 Comments
     
    LVL 6

    Expert Comment

    by:ryerras
    Remember with dynamic controls, they should be created each time the page loads. And also remember that neither the controls, nor their properties are available on the postback, because page has no way of knowing these controls on the postback, until they are recreated, that means the client changes are gone.
    0
     
    LVL 8

    Expert Comment

    by:nishikanth
    the problem with dynamica controls is that you must recreate them at every post back....

    everyone faces this problem with Dynamic controls


    http://aspnet.4guysfromrolla.com/articles/081402-1.aspx
    http://aspnet.4guysfromrolla.com/articles/082102-1.aspx
    http://www.c-sharpcorner.com/Code/2003/July/DynamicallyCreateASPNETControls.asp
    0
     
    LVL 8

    Accepted Solution

    by:
    to retain your viewstate, add your control on before checking for your post back.


     Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim txt As New TextBox()
            txt.ID = "MyTextBoxID"
            plchldr.Controls.Add(txt)             ''''' Add your control here instead of after the end if...

            If Not IsPostBack Then
                txt.Text = "Hello"
                txt.BackColor = Color.Yellow
            End If
    end sub

    check this link for detail discussion on the above issue....
    http://www.experts-exchange.com/Web/Web_Languages/Q_20809587.html#9909168

    -----------------------------------------
    Load the controls on every post back


       Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Put user code to initialize the page here
            If viewstate("Add") = "True" Then            ''''Check if the Link Buttons have already been created
                Adddata()
            End If
        End Sub


    Sub Adddata()
            'Get a list of the categories
            '2. Create the command object, passing in the SQL string
            Dim strSQL As String
            OleDbConnection1.Open()
            strSQL = "SELECT catno,catname from category"
            Dim myCommand As OleDbCommand = New OleDbCommand(strSQL, OleDbConnection1)

            'Set the datagrid's datasource to the datareader and databind
            Dim myDataReader As OleDbDataReader = myCommand.ExecuteReader()

            'Loop through the results, creating a LinkButton for each row
            Dim filterButton As LinkButton
            While myDataReader.Read()
                'Add the LinkButton

                filterButton = New LinkButton()
                filterButton.ID = myDataReader("CatNo")
                filterButton.Text = myDataReader("CatName")
                filterButton.CommandArgument = myDataReader("catno")
                AddHandler filterButton.Command, AddressOf Me.FilterData

                PlaceHolder1.Controls.Add(filterButton)

            End While

            myDataReader.Close()
            OleDbConnection1.Close()

           viewstate("Add") = True
        End Sub


        Sub FilterData(ByVal sender As Object, ByVal e As CommandEventArgs)
           '''Code for handling event
        End Sub


    Also check this for detailed info....
    everyone faces this problem with Dynamic controls

    http://devcenter.infragistics.com/Articles/ArticleTemplate.Aspx?ArticleID=2149
    http://aspnet.4guysfromrolla.com/articles/081402-1.aspx
    http://aspnet.4guysfromrolla.com/articles/082102-1.aspx
    http://www.c-sharpcorner.com/Code/2003/July/DynamicallyCreateASPNETControls.asp
    0

    Write Comment

    Please enter a first name

    Please enter a last name

    We will never share this with anyone. Privacy Policy Terms of Use

    Featured Post

    Why You Should Analyze Threat Actor TTPs

    After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

    Suggested Solutions

    To create your own bootstrapper package for use in a ClickOnce deployment may seem overwelming at first. I have created and put into production several custom bootstrapper packages. What is the advantage to creating your own bookstrapper package?…
    IP addresses can be stored in a database in any of several ways.  These ways may vary based on the volume of the data.  I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.   …
    This video is in connection to the article "The case of a missing mobile phone (https://www.experts-exchange.com/articles/28474/The-Case-of-a-Missing-Mobile-Phone.html)". It will help one to understand clearly the steps to track a lost android phone.
    In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

    877 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    15 Experts available now in Live!

    Get 1:1 Help Now