【セル型】サーバー側で独自の入力検証を行いたい

文書番号 : 35536     文書種別 : 使用方法     登録日 : 2013/03/01     最終更新日 : 2014/10/21
文書を印刷する
対象製品
SPREAD for ASP.NET 7.0J
詳細
サーバー側で独自の入力検証を行いたい場合は、以下のようにカスタムセル型クラスを作成してValidateEditorValueメソッドをオーバーライドする方法があります。

  メモメモ
  • 入力検証はセルへの入力を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


◎サンプルコード(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; }
  }
}
キーワード
セル型