【セル型】 ポストバックするとカスタムセルが正しく動作しない

文書番号 : 21828     文書種別 : 使用方法     最終更新日 : 2006/06/23
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
製品ではポストバックが発生するたびにセル型オブジェクトを初期化します。そのためカスタムセル型でポストバックを超えて永続化(維持)したい設定がある場合にはICanSerializeXmlインターフェースを実装しCanSerializeXmlプロパティをオーバーライドします。そしてCanSerializeXmlプロパティが戻り値としてFalseを返すようにします。

例えば、コンボボックス型セルに背景色を設定したいとします。
残念ながら既存のコンボボックス型セルにはBackColorプロパティがありません。
この場合、コンボボックス型セルクラスのサブクラスを作成し、BackColorプロパティを追加することができます。
BackColorプロパティの設定内容をポストバック後も維持するために次のようにICanSerializeXmlインターフェースを実装しCanSerializeXmlプロパティをオーバーライドします。

  メモメモ
  • 既存クラスの継承は.NETアプリケーション開発における一般的な手法です。継承方法の詳細についてはMSDNライブラリをご参照ください。(既存クラスのカスタマイズ方法については弊社サポートサービス対象外となります)

【VB サンプルコード】
------------------------------
カスタムセル型クラス
------------------------------
Imports FarPoint.Web.Spread
Imports FarPoint.Web.Spread.Model

<Serializable()> Public Class MyComboType
  Inherits ComboBoxCellType
  Implements ICanSerializeXml

  Dim _bgColor As Color

  Public Property BackColor() As Color
    Get
      Return _bgColor
    End Get
    Set(ByVal Value As Color)
      _bgColor = Value
    End Set
  End Property

  Public Overrides Function PaintCell(ByVal id As String, ByVal parent As System.Web.UI.WebControls.TableCell, ByVal style As FarPoint.Web.Spread.Appearance, ByVal margin As FarPoint.Web.Spread.Inset, ByVal value As Object, ByVal upperLevel As Boolean) As System.Web.UI.Control
    Dim dlist As DropDownList = CType(MyBase.PaintCell(id, parent, style, margin, value, upperLevel), DropDownList)
    'コンボボックスに背景色を設定
    dlist.BackColor = _bgColor

    Return dlist
  End Function

  Public ReadOnly Property CanSerializeXml() As Boolean Implements FarPoint.Web.Spread.Model.ICanSerializeXml.CanSerializeXml
    Get
      Return False
    End Get
  End Property
End Class
------------------------------
Webフォームクラス
------------------------------
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If IsPostBack Then Return

    Dim combo As New MyComboType
    combo.Items = New String() {"A", "B", "C"}
    combo.ShowButton = True
    combo.BackColor = Color.Beige

    FpSpread1.Sheets(0).Cells(0, 0).CellType = combo
  End Sub


【C# サンプルコード】
using FarPoint.Web.Spread;
using FarPoint.Web.Spread.Model ;

  [Serializable()]public class MyComboType:ComboBoxCellType,ICanSerializeXml
  {
    Color _bgColor;

    public Color BackColor
    {
      get{return _bgColor;}
      set{_bgColor=value;}
    }

    public override Control PaintCell(string id, TableCell parent, Appearance style, Inset margin, object ovalue, bool upperLevel)
    {
      DropDownList dlist=base.PaintCell(id,parent,style,margin,ovalue,upperLevel) as DropDownList;
      //コンボボックスに背景色を設定
      dlist.BackColor=_bgColor;
      
      return dlist;
    }

    public bool CanSerializeXml
    {
      get{return false;}
    }  
  }
------------------------------
Webフォームクラス
------------------------------
    private void Page_Load(object sender, System.EventArgs e)
    {
      if(IsPostBack)return;

      MyComboType combo=new MyComboType();
      combo.Items=new string[]{"A","B","C"};
      combo.ShowButton=true;
      combo.BackColor=Color.Beige;

      FpSpread1.Sheets[0].Cells[0,0].CellType=combo;
    }
キーワード
セル型

この文書は、以前は次のFAQ IDで公開されていました : 9152