【セル型】入力値をバイト数で制限したい

文書番号 : 21853     文書種別 : 使用方法     最終更新日 : 2006/06/23
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
製品のテキスト型セルでは内部的にASP.NET標準のテキストボックスを使用しており、文字列をUnicodeとして操作します。
そのためテキスト型セルは入力された文字を半角、全角に依らずバイト単位ではなく文字数で判断します。

入力値をバイト数で制限したい場合、次の方法があります。

テキスト型セルではセルの編集状態が終了するとクライアント側で検証メソッドを実行します。
既存のテキスト型セルクラスを継承し、この検証メソッドの動作をカスタマイズすることが可能です。
検証メソッドの中で入力されたデータのバイト数を調べる処理を実装することができます。

下記、サンプルコードです。

なお、この方法ではHTCファイルという外部ファイルにクライアントスクリプトを記述します。
このファイルはWebフォームと同じディレクトリに保存し、日本語のメッセージを送受信するためにエンコーディングをweb.configで設定するグローバリゼーションのエンコーディング設定(デフォルトはUTF-8)に合わせて下さい。

  メモメモ
  • 既存クラスの継承は.NETアプリケーション開発における一般的な手法です。継承方法の詳細についてはMSDNライブラリをご参照ください。(既存クラスのカスタマイズ方法については弊社サポートサービス対象外となります)

【VB サンプルコード】
-----------------------
Webフォームクラス
-----------------------
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If IsPostBack Then
      Return
    End If
    FpSpread1.Sheets(0).Columns(0).CellType = New myTextType
  End Sub

-----------------------------
カスタムテキスト型セルクラス
-----------------------------
Imports FarPoint.Web.Spread
<Serializable()> Public Class myTextType
  Inherits TextCellType

  Public Overrides ReadOnly Property EditorClientScriptUrl() As String
    Get
      Return "mytexteditor.htc"
    End Get
  End Property

End Class

-----------------------
mytexteditor.htc
-----------------------
<PUBLIC:COMPONENT>
 <PUBLIC:METHOD NAME="isValid">
 </PUBLIC:METHOD>
</PUBLIC:COMPONENT>
<SCRIPT language="javascript">
 function isValid(val) {
  if (val==null||val=="") {
   return "空白の入力はサポートされません。";
  }
  else{
   if(getLen(val)>3)
    return "3バイトを超えています!";
  }
  return "";
 }
 function getLen(str){
  var result = str.length;
  for(var i = result - 1; i >= 0; i--)
    if(str.charCodeAt(i) >= 256)
      result++;
  return result;
 }
</SCRIPT>


【C# サンプルコード】
-----------------------
Webフォームクラス
-----------------------
    private void Page_Load(object sender, System.EventArgs e)
    {
      if (IsPostBack)return;
      FpSpread1.Sheets[0].Columns[0].CellType=new myTextType();
    }

-----------------------------
カスタムテキスト型セルクラス
-----------------------------
  [Serializable()]public class myTextType:TextCellType
  {
    public override string EditorClientScriptUrl
    {
      get
      {
        return "mytexteditor.htc";
      }
    }

  }

-----------------------
mytexteditor.htc
-----------------------
VB 版サンプルコードと同様
キーワード
セル型

この文書は、以前は次のFAQ IDで公開されていました : 9177