• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 722
  • Last Modified:

Retain values from dynamically created table with controls

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].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[1].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[2].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[3].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[4].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[5].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[6].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[7].HorizontalAlign = HorizontalAlign.Center;
                  newRow.Cells[8].HorizontalAlign = HorizontalAlign.Center;

                  //Store the new row in the array list

                  //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)


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



  • 2
1 Solution
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.
the problem with dynamica controls is that you must recreate them at every post back....

everyone faces this problem with Dynamic controls

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....

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
        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
        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


        End While


       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

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now