1

新しいグリッドビューを含む新しい行を作成するグリッドビューがあります。2番目のグリッドビューを作成する方法は次のとおりです。

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

そして、別のコマンドまたはグリッドビューに関連する何かを実行する必要があるときはいつでも、次のように行を削除すると思いました:

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.

私はこれに非常に不満を感じており、事前に感謝の意を表して感謝の気持ちで答えます

4

1 に答える 1

1

そのコントロールは動的であるため、ViewState を追跡する必要がない場合があるため、EnableViewStatefalse に設定してみて、それが役立つかどうかを確認してください。

于 2012-05-04T22:57:24.530 に答える