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

文書番号 : 35426     文書種別 : 使用方法     登録日 : 2013/03/01     最終更新日 : 2014/10/21
文書を印刷する
対象製品
SPREAD for ASP.NET 7.0J
詳細
メモメモ
  • 既存のセル型を継承しカスタムセルを作成する場合、不具合修正や内部仕様の変更により動作が変わる可能性があります。

製品ではポストバックが発生するたびにセル型オブジェクトを初期化します。そのためカスタムセル型でポストバックを超えて永続化(維持)したい設定がある場合にはICanSerializeXmlインターフェースを実装しCanSerializeXmlプロパティをオーバーライドします。そしてCanSerializeXmlプロパティが戻り値としてFalseを返すようにします。

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

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

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

  Dim _foreColor As Color

  Public Property ForeColor() As Color
    Get
      Return _foreColor
    End Get
    Set(ByVal Value As Color)
      _foreColor = 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.ForeColor = _foreColor
      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フォームクラス
------------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If IsPostBack Then Return

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

  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 _foreColor;

  public Color ForeColor
  {
    get { return _foreColor; }
    set { _foreColor = 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.ForeColor = _foreColor;
      
    return dlist;
  }

  public bool CanSerializeXml
  {
    get { return false; }
  }  
}

------------------------------
Webフォームクラス
------------------------------
protected void Page_Load(object sender, EventArgs e)
{
  if(IsPostBack)return;

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

  FpSpread1.Sheets[0].Cells[0,0].CellType=combo;
}