2012-05-04 3 views
1

У меня есть GridView, который создает новую строку с новым GridView в нем методе создания второго GridView является:Не удалось загрузить viewstate. Дерева управления, в который загружается ViewState должны соответствовать дереву управления, который был использован для сохранения ViewState

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(); 
    } 
} 

и я подумал, что когда-либо мне нужно будет выполнить другую команду или что-то, что связано с GridView я удалим строку, как это:

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

, а затем заселить mastergridview, но прежде, чем я получаю шанс сделать это, эта ошибка продолжает всплывать :

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. 

им очень расстроен этим, и я буду принимать какие-либо ответ с благодарностью заранее спасибо

ответ

1

Вам не нужно отслеживать ViewState для этого элемента управления, так как это динамический, поэтому попытайтесь установить EnableViewState ложь и посмотреть, поможет ли это.

+0

спасибо Джеймсу Джонсону и ПОКЛОНИМ ВАС !! @! –

Смежные вопросы