【セル型】 ポストバックするとカスタムセルが正しく動作しない
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
製品ではポストバックが発生するたびにセル型オブジェクトを初期化します。そのためカスタムセル型でポストバックを超えて永続化(維持)したい設定がある場合にはICanSerializeXmlインターフェースを実装しCanSerializeXmlプロパティをオーバーライドします。そしてCanSerializeXmlプロパティが戻り値としてFalseを返すようにします。
例えば、コンボボックス型セルに背景色を設定したいとします。
残念ながら既存のコンボボックス型セルにはBackColorプロパティがありません。
この場合、コンボボックス型セルクラスのサブクラスを作成し、BackColorプロパティを追加することができます。
BackColorプロパティの設定内容をポストバック後も維持するために次のようにICanSerializeXmlインターフェースを実装しCanSerializeXmlプロパティをオーバーライドします。
メモ
【VB サンプルコード】
【C# サンプルコード】
例えば、コンボボックス型セルに背景色を設定したいとします。
残念ながら既存のコンボボックス型セルには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
カスタムセル型クラス
------------------------------
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;
}
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