【セル型】入力値をバイト数で制限したい
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
製品のテキスト型セルでは内部的にASP.NET標準のテキストボックスを使用しており、文字列をUnicodeとして操作します。
そのためテキスト型セルは入力された文字を半角、全角に依らずバイト単位ではなく文字数で判断します。
入力値をバイト数で制限したい場合、次の方法があります。
テキスト型セルではセルの編集状態が終了するとクライアント側で検証メソッドを実行します。
既存のテキスト型セルクラスを継承し、この検証メソッドの動作をカスタマイズすることが可能です。
検証メソッドの中で入力されたデータのバイト数を調べる処理を実装することができます。
下記、サンプルコードです。
なお、この方法ではHTCファイルという外部ファイルにクライアントスクリプトを記述します。
このファイルはWebフォームと同じディレクトリに保存し、日本語のメッセージを送受信するためにエンコーディングをweb.configで設定するグローバリゼーションのエンコーディング設定(デフォルトはUTF-8)に合わせて下さい。
  
メモ
【VB サンプルコード】
【C# サンプルコード】
そのためテキスト型セルは入力された文字を半角、全角に依らずバイト単位ではなく文字数で判断します。
入力値をバイト数で制限したい場合、次の方法があります。
テキスト型セルではセルの編集状態が終了するとクライアント側で検証メソッドを実行します。
既存のテキスト型セルクラスを継承し、この検証メソッドの動作をカスタマイズすることが可能です。
検証メソッドの中で入力されたデータのバイト数を調べる処理を実装することができます。
下記、サンプルコードです。
なお、この方法では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>
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 版サンプルコードと同様
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