次の方法で共有


Control.ClearChildViewState メソッド

サーバー コントロールのすべての子コントロールのビューステート情報を削除します。

Protected Sub ClearChildViewState()
[C#]
protected void ClearChildViewState();
[C++]
protected: void ClearChildViewState();
[JScript]
protected function ClearChildViewState();

解説

このメソッドは、通常、テンプレート宣言されたデータ連結サーバー コントロールを開発する場合に、 DataBind メソッドをオーバーライドするときに使用されます。このメソッドを呼び出さない場合、子コントロールのビューステートの情報は親サーバー コントロールに書き込むことができますが、データ連結が発生するとオーバーライドされます。

このメソッドの使用方法については、「 template 宣言のあるデータ連結コントロールの開発 」を参照してください。

使用例

テンプレート宣言されたデータ連結コントロールの OnDataBinding メソッドのオーバーライドの例を次に示します。コントロールが連結する DataSource が設定される場合は、 Controls.Clear メソッドを使用してコントロールの ControlCollection が空になり、 ClearChildViewState メソッドを使用して子コントロールに対して保存されたビューステート情報が削除されます。

 
' Override to create the repeated items from the DataSource.
Protected Overrides Sub OnDataBinding(E As EventArgs)
    MyBase.OnDataBinding(e)

    If Not DataSource Is Nothing
        ' Clear any existing child controls.
        Controls.Clear()
        ' Clear any previous view state for the existing child controls.
        ClearChildViewState()

        ' Iterate over the DataSource, creating a new item for each data item.
        Dim DataEnum As IEnumerator = DataSource.GetEnumerator()
        Dim I As Integer = 0
        Do While (DataEnum.MoveNext())

            ' Create an item.
            Dim Item As RepeaterItemVB = New RepeaterItemVB(I, DataEnum.Current)
            ' Initialize the item from the template.
            ItemTemplate.InstantiateIn(Item)
            ' Add the item to the ControlCollection.
            Controls.Add(Item)

            I = I + 1
        Loop

        ' Prevent child controls from being created again.
        ChildControlsCreated = true
        ' Store the number of items created in view state for postback scenarios.
        ViewState("NumItems") = I
    End If
End Sub

[C#] 
// Override to create the repeated items from the DataSource.
protected override void OnDataBinding(EventArgs e) {
    base.OnDataBinding(e);

    if (DataSource != null) {
        // Clear any existing child controls.
        Controls.Clear();
        // Clear any previous view state for the existing child controls.
        ClearChildViewState();

        // Iterate over the DataSource, creating a new item for each data item.
        IEnumerator dataEnum = DataSource.GetEnumerator();
        int i = 0;
        while(dataEnum.MoveNext()) {

            // Create an item.
            RepeaterItem item = new RepeaterItem(i, dataEnum.Current);
            // Initialize the item from the template.
            ItemTemplate.InstantiateIn(item);
            // Add the item to the ControlCollection.
            Controls.Add(item);

            i++;
        }

        // Prevent child controls from being created again.
        ChildControlsCreated = true;
        // Store the number of items created in view state for postback scenarios.
        ViewState["NumItems"] = i;
    }
}

[C++] 
// Override to create the repeated items from the DataSource.
protected:
void OnDataBinding(EventArgs * e) 
{
   __super::OnDataBinding(e);

   if (DataSource != 0) 
   {
      // Clear any existing child controls.
      Controls->Clear();
      // Clear any previous view state for the existing child controls.
      ClearChildViewState();

      // Iterate over the DataSource, creating a new item for each data item.
      IEnumerator* dataEnum = DataSource->GetEnumerator();
      int i = 0;
      while(dataEnum->MoveNext()) 
      {
         // Create an item.
         RepeaterItem* item = new RepeaterItem(i, dataEnum->Current);
         // Initialize the item from the template.
         ItemTemplate->InstantiateIn(item);
         // Add the item to the ControlCollection.
         Controls->Add(item);
         i++;
      }

      // Prevent child controls from being created again.
      ChildControlsCreated = true;
      // Store the number of items created in view state for postback scenarios.
      ViewState->Item[S"NumItems"] = __box(i);
   }
}

[JScript] 
// Override to create the repeated items from the DataSource.
protected override function OnDataBinding(e : EventArgs) {
    super.OnDataBinding(e);

    if (DataSource != null) {
        // Clear any existing child controls.
        Controls.Clear();
        // Clear any previous view state for the existing child controls.
        ClearChildViewState();

        // Iterate over the DataSource, creating a new item for each data item.
        var dataEnum : IEnumerator = DataSource.GetEnumerator();
        var i : int = 0;
        while(dataEnum.MoveNext()) {

            // Create an item.
            var item : RepeaterItem = new RepeaterItem(i, dataEnum.Current);
            // Initialize the item from the template.
            ItemTemplate.InstantiateIn(item);
            // Add the item to the ControlCollection.
            Controls.Add(item);

            i++;
        }

        // Prevent child controls from being created again.
        ChildControlsCreated = true;
        // Store the number of items created in view state for postback scenarios.
        ViewState["NumItems"] = i;
    }
}

必要条件

プラットフォーム: Windows 2000, Windows XP Professional, Windows Server 2003 ファミリ

参照

Control クラス | Control メンバ | System.Web.UI 名前空間 | ViewState | DataBind | template 宣言のあるデータ連結コントロールの開発