【操作】SPREADを複数配置した場合、独自のセル型を作成してisValidメソッド内でアラートを表示させると、アラートが複数回表示される場合がある
対象製品
SPREAD for .NET 2.5J Web Forms Edition
発生環境
動作保証環境と同様
状況
修正済み
詳細
WebフォームにSPREADコントロールを複数配置した場合、独自のセル型を作成してisValidメソッド内でアラートを表示させると、アラートが複数回表示される場合があります。
【再現手順】
1.新規WebフォームにSPREADを2つ配置します
2.下記のサンプルコードをコピーします
3.アプリケーションを実行します
4.FpSpread1のA1セルに「a」と入力します
5.FpSpread2をクリックします
6.アラートが複数回表示されます。
【サンプルコード】
-------------------------
Webフォームクラス
-------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Return
End If
Dim mtc As New MyTextCell
FpSpread1.ActiveSheetView.Columns(0).CellType = mtc
End Sub
-------------------------
カスタムセル型クラス
-------------------------
<Serializable()> _
Public Class MyTextCell
Inherits FarPoint.Web.Spread.TextCellType
Public Overloads Overrides ReadOnly Property EditorClientScriptUrl() As String
Get
Return "n0-9999999.htc"
End Get
End Property
End Class
-------------------------
htcファイル
-------------------------
<PUBLIC:COMPONENT>
<PUBLIC:METHOD NAME="isValid">
</PUBLIC:METHOD>
</PUBLIC:COMPONENT>
<script language="javascript">
function isValid(val)
{
if (val.length != 0)
{
val = val.replace(/,/g,"");
if (isNaN(val))
{
alert(val + "は入力エラーです");
return "半角数字を入力してください";
}
}
return "";
}
</script>
【再現手順】
1.新規WebフォームにSPREADを2つ配置します
2.下記のサンプルコードをコピーします
3.アプリケーションを実行します
4.FpSpread1のA1セルに「a」と入力します
5.FpSpread2をクリックします
6.アラートが複数回表示されます。
【サンプルコード】
-------------------------
Webフォームクラス
-------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Return
End If
Dim mtc As New MyTextCell
FpSpread1.ActiveSheetView.Columns(0).CellType = mtc
End Sub
-------------------------
カスタムセル型クラス
-------------------------
<Serializable()> _
Public Class MyTextCell
Inherits FarPoint.Web.Spread.TextCellType
Public Overloads Overrides ReadOnly Property EditorClientScriptUrl() As String
Get
Return "n0-9999999.htc"
End Get
End Property
End Class
-------------------------
htcファイル
-------------------------
<PUBLIC:COMPONENT>
<PUBLIC:METHOD NAME="isValid">
</PUBLIC:METHOD>
</PUBLIC:COMPONENT>
<script language="javascript">
function isValid(val)
{
if (val.length != 0)
{
val = val.replace(/,/g,"");
if (isNaN(val))
{
alert(val + "は入力エラーです");
return "半角数字を入力してください";
}
}
return "";
}
</script>
回避方法
2008/03/31版で修正済み。
2008/03/31版より前のバージョンでは次の回避方法が有効です。
以下のように、別のSPREADコントロールにフォーカスが遷移した場合には、アラートを表示しないようにします。
※以下の回避方法はv2.5.1007.2002/v2.5.2007.2005で有効です。
-------------------------
htcファイル
-------------------------
<PUBLIC:COMPONENT>
<PUBLIC:METHOD NAME="isValid">
</PUBLIC:METHOD>
</PUBLIC:COMPONENT>
<script language="javascript">
function isValid(val)
{
if (val.length != 0)
{
val = val.replace(/,/g,"");
if (isNaN(val))
{
if (isActive())//Alertを出す前にActive Spreadを確認
{
alert(val + "は入力エラーです");
}
return "半角数字を入力してください";
}
}
return "";
}
// Alertを出す前にActive Spreadを確認
function isActive()
{
var ret = false;
var s = window.document.FpActiveSpread;
if(s.id != null)
{
if(s.id == "FpSpread1")//SPREADのIDを設定して下さい。
ret = true;
}
return ret;
}
</script>
2008/03/31版より前のバージョンでは次の回避方法が有効です。
以下のように、別のSPREADコントロールにフォーカスが遷移した場合には、アラートを表示しないようにします。
※以下の回避方法はv2.5.1007.2002/v2.5.2007.2005で有効です。
-------------------------
htcファイル
-------------------------
<PUBLIC:COMPONENT>
<PUBLIC:METHOD NAME="isValid">
</PUBLIC:METHOD>
</PUBLIC:COMPONENT>
<script language="javascript">
function isValid(val)
{
if (val.length != 0)
{
val = val.replace(/,/g,"");
if (isNaN(val))
{
if (isActive())//Alertを出す前にActive Spreadを確認
{
alert(val + "は入力エラーです");
}
return "半角数字を入力してください";
}
}
return "";
}
// Alertを出す前にActive Spreadを確認
function isActive()
{
var ret = false;
var s = window.document.FpActiveSpread;
if(s.id != null)
{
if(s.id == "FpSpread1")//SPREADのIDを設定して下さい。
ret = true;
}
return ret;
}
</script>
キーワード
SPRN06440
この文書は、以前は次のバグレポートIDで公開されていました : 7123