【セル型】サーバー側で独自の入力検証を行いたい
対象製品
SPREAD for ASP.NET 7.0J
詳細
サーバー側で独自の入力検証を行いたい場合は、以下のようにカスタムセル型クラスを作成してValidateEditorValueメソッドをオーバーライドする方法があります。
  メモ
◎サンプルコード(VB)
◎サンプルコード(C#)
  メモ
- 入力検証はセルへの入力をDataModelに反映するタイミングで実行されるため、SaveChangesメソッドか、コマンドバーのUpdateボタンをクリック後に実行されます。
- 不正な値が入力された場合、SPREADのデータモデルは更新されず、セルの背景色を黄色・文字色を赤に変更します。
- 既存のセル型を継承しカスタムセルを作成する場合、不具合修正や内部仕様の変更により動作が変わる可能性があります。
◎サンプルコード(VB)
------------------------
Webフォームクラス
------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Return
End If
FpSpread1.Sheets(0).Columns(0).CellType = New MyCustomValidateSV
End Sub
-------------------------------
MyCustomValidateSVクラス
※例)日付型セルを継承
-------------------------------
<Serializable()> Public Class MyCustomValidateSV
Inherits FarPoint.Web.Spread.DateTimeCellType
Implements FarPoint.Web.Spread.Model.ICanSerializeXml
Public Overrides Function ValidateEditorValue(ByVal value As Object) As String
' 通常のチェックを実施
Dim err As String = MyBase.ValidateEditorValue(value)
If err Is Nothing And Not value Is Nothing Then
'独自のエラーチェック
If value.ToString() = System.DateTime.Now.ToString("yyyy/MM/dd") Then
Return "エラー" ' エラーメッセージ
Else
Return Nothing
End If
Else
Return err
End If
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 Page.IsPostBack Then
Return
End If
FpSpread1.Sheets(0).Columns(0).CellType = New MyCustomValidateSV
End Sub
-------------------------------
MyCustomValidateSVクラス
※例)日付型セルを継承
-------------------------------
<Serializable()> Public Class MyCustomValidateSV
Inherits FarPoint.Web.Spread.DateTimeCellType
Implements FarPoint.Web.Spread.Model.ICanSerializeXml
Public Overrides Function ValidateEditorValue(ByVal value As Object) As String
' 通常のチェックを実施
Dim err As String = MyBase.ValidateEditorValue(value)
If err Is Nothing And Not value Is Nothing Then
'独自のエラーチェック
If value.ToString() = System.DateTime.Now.ToString("yyyy/MM/dd") Then
Return "エラー" ' エラーメッセージ
Else
Return Nothing
End If
Else
Return err
End If
End Function
Public ReadOnly Property CanSerializeXml() As Boolean Implements FarPoint.Web.Spread.Model.ICanSerializeXml.CanSerializeXml
Get
Return False
End Get
End Property
End Class
◎サンプルコード(C#)
------------------------
Webフォームクラス
------------------------
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
return
}
FpSpread1.Sheets[0].Columns[0].CellType = new MyCustomValidateSV();
}
-------------------------------
MyCustomValidateSVクラス
※例)日付型セルを継承
-------------------------------
[Serializable()]
public class MyCustomValidateSV : FarPoint.Web.Spread.DateTimeCellType, FarPoint.Web.Spread.Model.ICanSerializeXml
{
public override String ValidateEditorValue(object value)
{
// 通常のチェック
String err = base.ValidateEditorValue(value);
// 独自のエラーチェック
if(err == null && value != null ){
if (value.ToString() == System.DateTime.Now.ToString("yyyy/MM/dd")){
return "エラー"; // エラーメッセージ
}else{
return null;
}
}else{
return err;
}
}
public bool CanSerializeXml
{
get { return false; }
}
}
Webフォームクラス
------------------------
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
return
}
FpSpread1.Sheets[0].Columns[0].CellType = new MyCustomValidateSV();
}
-------------------------------
MyCustomValidateSVクラス
※例)日付型セルを継承
-------------------------------
[Serializable()]
public class MyCustomValidateSV : FarPoint.Web.Spread.DateTimeCellType, FarPoint.Web.Spread.Model.ICanSerializeXml
{
public override String ValidateEditorValue(object value)
{
// 通常のチェック
String err = base.ValidateEditorValue(value);
// 独自のエラーチェック
if(err == null && value != null ){
if (value.ToString() == System.DateTime.Now.ToString("yyyy/MM/dd")){
return "エラー"; // エラーメッセージ
}else{
return null;
}
}else{
return err;
}
}
public bool CanSerializeXml
{
get { return false; }
}
}
キーワード
セル型