【操作】SPREADを複数配置した場合、独自のセル型を作成してisValidメソッド内でアラートを表示させると、アラートが複数回表示される場合がある

文書番号 : 24673     文書種別 : 不具合     最終更新日 : 2007/09/12
文書を印刷する
対象製品
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>
回避方法
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>
キーワード
SPRN06440

この文書は、以前は次のバグレポートIDで公開されていました : 7123