Daniel Jakobsen Hallel
Daniel Jakobsen Hallel

Reputation: 584

Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate

i have a gridview that creates a new row with a new gridview in it the method of creating the second gridview is :

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "PopExtendedGrid")
    {


    GridView _gridView = (GridView)sender;
int _rowIndex2 = int.Parse(e.CommandArgument.ToString());
GridView _ChildGrid = new GridView();
Control x = _gridView.Rows[_rowIndex2 + 1].Cells[1].Controls[1];
int Oid = int.Parse(((Label)x).Text);
_ChildGrid.DataSource = hs.GetExtendedGrid(Oid);
_ChildGrid.ID = "ChildGrid";
_ChildGrid.AutoGenerateColumns = false;
_ChildGrid.CssClass = "ChildGridS";
_ChildGrid.HeaderStyle.CssClass = "CreateHead";
BoundField one = new BoundField();
one.DataField = "ItemID";
one.HeaderText = "קוד מוצר";
_ChildGrid.Columns.Add(one);

BoundField two = new BoundField();
two.DataField = "ItemName";
two.HeaderText = "שם מוצר";
_ChildGrid.Columns.Add(two);

BoundField three = new BoundField();
three.DataField = "ItemSize";
three.HeaderText = "גודל מוצר";
_ChildGrid.Columns.Add(three);

GridViewRow tr = new GridViewRow(_rowIndex2 + 2 +10*this.GridView1.PageIndex,-1 , DataControlRowType.EmptyDataRow , DataControlRowState.Normal);
TableCell tc = new TableCell();
tc.ColumnSpan = _gridView.Columns.Count;
tc.Controls.Add(_ChildGrid);
tr.Cells.Add(tc);
if ((DataView)Session["dataSource"] != null)
 {
 DataView dv = (DataView)Session["dataSource"];
 this.GridView1.DataSource = dv;
 this.GridView1.DataBind();
 }
                else
                {
                    if (Session["lvl"].ToString() == "high")
                    {
                        PopulateGridViewAdmin();
                    }
                    else
                    {
                        PopulateGridViewUser();
                    }
                }
this.GridView1.Controls[0].Controls.AddAt(_rowIndex2 + 2, tr);
Session["ChildIndex"] = (_rowIndex2 + 2).ToString();
_ChildGrid.DataBind();
  }
}

and i thought that when ever i will need to execute another command or something that is related to the gridview i will remove the row like this:

this.GridView1.Controls[0].Controls.RemoveAt(int.Parse(Session["ChildIndex"].ToString()));

and then repopulate the mastergridview but before i get the chance to do so this error keeps poping up:

Failed to load viewstate.  The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request.  For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.

im very frustrated by this and i will take any answer with great gratitude thanks in advance

Upvotes: 1

Views: 5342

Answers (1)

James Johnson
James Johnson

Reputation: 46047

You may not need to track ViewState for that control since it's dynamic, so try setting EnableViewState to false and see if that helps.

Upvotes: 1

Related Questions