castle king
castle king

Reputation: 23

Retain table and checked checkboxes after postback

In my webpage, I have Calendar, Table and button.

After selecting date, it will fire the databind() method of table. There are checkboxes with autopostback =true. Once checked, the Table disappears. I have no idea on how to retain the table with the checked checkboxes after post back.

 protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString.Get("Id") != null)
        {

            if (!IsPostBack)
            {
                Calendar1.Visible = false;

            }
        }
    }

 protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {
            Label1.Text = Calendar1.SelectedDate.ToShortDateString();
             //Set datasource = (cal.selectedDate), the invoking override 
                 // DataBind() method to create table

                }
            Calendar1.Visible = false;

        }

I've tried to databind the table again else (IsPostBack) but i wasn't able to achieve my goals, instead, it created another table on top of the existing table

This is the method to create Table with checkboxes

public override void DataBind()
    {
            TableRow myTableRow = default(TableRow);
            TableCell myTableCell = default(TableCell);

        if (source != null && !(mDate == DateTime.MinValue))
        {

            for (int i = 0; i <= 23; i++)
            {

                foreach (DataRow row in source.Tables["Object"].Rows)
                {
                    myTableCell = new TableCell();
                    CheckBox cb = new CheckBox();
                    cb.AutoPostBack = true;
                    cb.Attributes.Add("id", row["objid"].ToString());
                    cb.InputAttributes.Add("rowID", mDate.Date.AddHours(i).ToString());
                    myTableCell.Controls.Add(cb);
                    myTableCell.HorizontalAlign = HorizontalAlign.Center;

                    myTableRow.Cells.Add(myTableCell);


                    TimeSheetTable.Rows.Add(myTableRow);
                }
            }
        }
        else
        {
            throw new ArgumentException(" Invalid Date.");
        }
    }

Upvotes: 0

Views: 592

Answers (1)

Brian Mains
Brian Mains

Reputation: 50728

Dynamically generated tables need to be regenerated on every postback. For subsequent postbacks, viewstate will be reloaded, but you have to recreate the table, cells, and controls in the same exact fashion, otherwise web forms complains about it. You need to do this during Init I believe; if checkbox checked status changed, the web forms framework will update the Checked property after load, so that will be taken care of.

I usually use a repeater or listview control as dynamic controls can be painful and the ListView is pretty flexible. Databinding takes care of rebuilding the control tree for you.

Upvotes: 1

Related Questions