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