[SPRN06568]【セル型】コールバックすると、GetValidator メソッドをオーバーライドしたカスタムセル型のデータ検証が動作しない
対象製品
SPREAD for .NET 2.5J Web Forms Edition
発生環境
この現象は、Visual Studio 2005を使用した開発環境で発生します
詳細
ページングなど、コールバックを行うとGetValidator メソッドをオーバーライドしたカスタムセル型のデータ検証が動作しない場合があります。
【再現手順】
1.新規WebフォームにSPREADを配置し、下記コードをコピーします
2.アプリケーションを実行します
3.ページナビゲーションボタンを押下してページングします
4.1列目のカスタムセル型の検証が行われません
【サンプルコード】
-------------------------
Webフォームクラス
-------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Page.IsPostBack Then
Return
End If
Dim vc As MyCustomValidate = New MyCustomValidate
vc.ErrorMessage = "エラー111"
vc.ClientValidationFunction = "errfunc1"
FpSpread1.Sheets(0).Columns(0).CellType = vc
FpSpread1.Sheets(0).RowCount = 30
End Sub
-------------------------
カスタムセル型クラス
-------------------------
<Serializable()> Public Class MyCustomValidate
Inherits FarPoint.Web.Spread.GeneralCellType
Implements FarPoint.Web.Spread.Model.ICanSerializeXml
Private _clientfunc As String
'検証に使用するクライアント側スクリプト関数名を取得または設定します
Public Property ClientValidationFunction() As String
Get
Return _clientfunc
End Get
Set(ByVal value As String)
_clientfunc = value
End Set
End Property
'検証コントロールとしてCustomValidatorを使用します
Public Overrides Function GetValidator() As System.Web.UI.WebControls.BaseValidator
Dim cv As New CustomValidator
cv.ClientValidationFunction = _clientfunc
cv.ErrorMessage = Me.ErrorMessage
Return cv
End Function
'カスタムセルでプロパティを追加する時(今回はClientValidationFunction)に必要です
Public ReadOnly Property CanSerializeXml() As Boolean Implements FarPoint.Web.Spread.Model.ICanSerializeXml.CanSerializeXml
Get
Return False
End Get
End Property
End Class
-------------------------
クライアント側スクリプト
-------------------------
<script type="text/javascript">
function errfunc1(src,arg)
{
//「ok」という文字列以外はエラー(1列目)
if(arg.Value=="ok")
arg.IsValid=true;
else
arg.IsValid=false;
}
</script>
【再現手順】
1.新規WebフォームにSPREADを配置し、下記コードをコピーします
2.アプリケーションを実行します
3.ページナビゲーションボタンを押下してページングします
4.1列目のカスタムセル型の検証が行われません
【サンプルコード】
-------------------------
Webフォームクラス
-------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Page.IsPostBack Then
Return
End If
Dim vc As MyCustomValidate = New MyCustomValidate
vc.ErrorMessage = "エラー111"
vc.ClientValidationFunction = "errfunc1"
FpSpread1.Sheets(0).Columns(0).CellType = vc
FpSpread1.Sheets(0).RowCount = 30
End Sub
-------------------------
カスタムセル型クラス
-------------------------
<Serializable()> Public Class MyCustomValidate
Inherits FarPoint.Web.Spread.GeneralCellType
Implements FarPoint.Web.Spread.Model.ICanSerializeXml
Private _clientfunc As String
'検証に使用するクライアント側スクリプト関数名を取得または設定します
Public Property ClientValidationFunction() As String
Get
Return _clientfunc
End Get
Set(ByVal value As String)
_clientfunc = value
End Set
End Property
'検証コントロールとしてCustomValidatorを使用します
Public Overrides Function GetValidator() As System.Web.UI.WebControls.BaseValidator
Dim cv As New CustomValidator
cv.ClientValidationFunction = _clientfunc
cv.ErrorMessage = Me.ErrorMessage
Return cv
End Function
'カスタムセルでプロパティを追加する時(今回はClientValidationFunction)に必要です
Public ReadOnly Property CanSerializeXml() As Boolean Implements FarPoint.Web.Spread.Model.ICanSerializeXml.CanSerializeXml
Get
Return False
End Get
End Property
End Class
-------------------------
クライアント側スクリプト
-------------------------
<script type="text/javascript">
function errfunc1(src,arg)
{
//「ok」という文字列以外はエラー(1列目)
if(arg.Value=="ok")
arg.IsValid=true;
else
arg.IsValid=false;
}
</script>
回避方法
入力検証を行うカスタムセル型クラスを作成する場合は、こちらの製品FAQに記載されている方法をご検討ください。
この文書は、以前は次のFAQ IDで公開されていました : 7269