【セル型】InputMan Web の Dateコントロールを使用したい
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
既存のセル型クラスを継承するカスタム型セルを作成することで可能です。
SPREADではPaintCellメソッドでセル上に表示するコントロールを設定します。カスタム型セルではこのPaintCellメソッドにてDateコントロールを設定します。
  
メモ
下記サンプルコードです。
新規WebフォームにSPREAD、Dateコントロールを配置した状態でコードをコピーし、動作を確認して下さい。
※新規WebフォームにDateコントロールを配置することでプロジェクトに必要な参照設定が追加されます。
このコントロールは1度目のデバッグ以降、削除して下さい。
※サンプルコードは次の製品にて動作確認を行いました。
- SPREAD .NET 2.5J Web Ed. Ver 2.5.1004.2002
- InputMan .NET 1.0J Web Ed. Ver 1.0.2006.1208
および
- SPREAD .NET 2.5J Web Ed. Ver 2.5.2004.2005
- InputMan .NET 2.0J Web Ed. Ver 2.0.2007.207
【VB サンプルコード】
【C# サンプルコード】
SPREADではPaintCellメソッドでセル上に表示するコントロールを設定します。カスタム型セルではこのPaintCellメソッドにてDateコントロールを設定します。
  

- 既存クラスの継承は.NETアプリケーション開発における一般的な手法です。継承方法の詳細についてはMSDNライブラリをご参照ください。(既存クラスのカスタマイズ方法については弊社サポートサービス対象外となります)
下記サンプルコードです。
新規WebフォームにSPREAD、Dateコントロールを配置した状態でコードをコピーし、動作を確認して下さい。
※新規WebフォームにDateコントロールを配置することでプロジェクトに必要な参照設定が追加されます。
このコントロールは1度目のデバッグ以降、削除して下さい。
※サンプルコードは次の製品にて動作確認を行いました。
- SPREAD .NET 2.5J Web Ed. Ver 2.5.1004.2002
- InputMan .NET 1.0J Web Ed. Ver 1.0.2006.1208
および
- SPREAD .NET 2.5J Web Ed. Ver 2.5.2004.2005
- InputMan .NET 2.0J Web Ed. Ver 2.0.2007.207
【VB サンプルコード】
-------------------------------------
Webフォームクラス
-------------------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As String
Dim j As Integer
Dim COLDATE As Int32 = 1 '日付列の列番号
If IsPostBack Then
' ポストバック時にDateコントロールのデータを確認します
For j = 0 To FpSpread1.Sheets(0).RowCount - 1
i = Page.Request.Form(FpSpread1.ID & "_mydate" & CStr(j) & "_" & CStr(COLDATE) & "_EditField")
FpSpread1.Sheets(0).Cells(j, 1).Value = i
Next
Return
End If
FpSpread1.Sheets(0).Columns(1).CellType = New MyDateTypeCell
FpSpread1.Sheets(0).Columns(1).Width = 160
End Sub
-------------------------------------
カスタム型セルクラス
-------------------------------------
Imports FarPoint.Web.Spread
<Serializable()> Public Class MyDateTypeCell
Inherits GeneralCellType
Public Overrides Function PaintCell(ByVal id As String, ByVal parent As System.Web.UI.WebControls.TableCell, ByVal style As FarPoint.Web.Spread.Appearance, ByVal margin As FarPoint.Web.Spread.Inset, ByVal value As Object, ByVal upperLevel As Boolean) As System.Web.UI.Control
'SPREADセルの編集をキャンセル
parent.Attributes.Add("FpCellType", "readonly")
Dim mydate As New GrapeCity.Web.Input.IMDate.Date
mydate.TabIndex = -1
mydate.DisplayFormat.Pattern = "ggg ee年 MM月 dd日"
mydate.Format.Pattern = "ggg ee年 MM月 dd日"
If Not (value Is Nothing) Then
mydate.Value = New GrapeCity.Web.Input.Core.DateTimeEx(Date.Parse(Cstr(value)))
End If
mydate.ID = "mydate" & id.Replace(",", "_")
mydate.ClientEvents.DropDownOpen = "mydate_dopen"
mydate.ClientEvents.DropDownClose = "mydate_dclose"
Return mydate
End Function
End Class
-------------------------------------
クライアント側スクリプト
-------------------------------------
<script type="text/javascript">
var COLDATE=1//日付列の列番号;
var flag_open = true;//フラグ(カレンダー開閉)
function window.onload(){
var s=document.getElementById("FpSpread1");
s.onkeydown=skeyd;
s.onActiveCellChanged=ac;
s.onmouseup=mu;
}
function mydate_dclose(oDate, eArgs){
if(flag_open)
{
oDate.SetDroppedDown(true);
flag_open = false;
}
}
function mydate_dopen(oDate, eArgs){
flag_open = true;
}
function skeyd(){
//SPREADのキー入力をキャンセル
var s=document.getElementById("FpSpread1");
if(s.ActiveCol!=COLDATE)return;
if(event.keyCode!=9)//[Tab]キー以外キャンセル
event.cancelBubble=true;
}
function ac(){
//InputMan Dateにフォーカスを移動
if(event.Col!=COLDATE)return;
var s=document.getElementById("FpSpread1");
var d=FindIMControl(s.id+"_mydate"+event.Row+"_"+event.Col);
d.SetFocus();
}
function mu(){
//InputMan Dateにフォーカスを移動
var s=document.getElementById("FpSpread1");
if(s.ActiveCol!=COLDATE)return;
var d=FindIMControl(s.id+"_mydate"+s.ActiveRow+"_"+s.ActiveCol);
d.SetFocus();
}
</script>
Webフォームクラス
-------------------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As String
Dim j As Integer
Dim COLDATE As Int32 = 1 '日付列の列番号
If IsPostBack Then
' ポストバック時にDateコントロールのデータを確認します
For j = 0 To FpSpread1.Sheets(0).RowCount - 1
i = Page.Request.Form(FpSpread1.ID & "_mydate" & CStr(j) & "_" & CStr(COLDATE) & "_EditField")
FpSpread1.Sheets(0).Cells(j, 1).Value = i
Next
Return
End If
FpSpread1.Sheets(0).Columns(1).CellType = New MyDateTypeCell
FpSpread1.Sheets(0).Columns(1).Width = 160
End Sub
-------------------------------------
カスタム型セルクラス
-------------------------------------
Imports FarPoint.Web.Spread
<Serializable()> Public Class MyDateTypeCell
Inherits GeneralCellType
Public Overrides Function PaintCell(ByVal id As String, ByVal parent As System.Web.UI.WebControls.TableCell, ByVal style As FarPoint.Web.Spread.Appearance, ByVal margin As FarPoint.Web.Spread.Inset, ByVal value As Object, ByVal upperLevel As Boolean) As System.Web.UI.Control
'SPREADセルの編集をキャンセル
parent.Attributes.Add("FpCellType", "readonly")
Dim mydate As New GrapeCity.Web.Input.IMDate.Date
mydate.TabIndex = -1
mydate.DisplayFormat.Pattern = "ggg ee年 MM月 dd日"
mydate.Format.Pattern = "ggg ee年 MM月 dd日"
If Not (value Is Nothing) Then
mydate.Value = New GrapeCity.Web.Input.Core.DateTimeEx(Date.Parse(Cstr(value)))
End If
mydate.ID = "mydate" & id.Replace(",", "_")
mydate.ClientEvents.DropDownOpen = "mydate_dopen"
mydate.ClientEvents.DropDownClose = "mydate_dclose"
Return mydate
End Function
End Class
-------------------------------------
クライアント側スクリプト
-------------------------------------
<script type="text/javascript">
var COLDATE=1//日付列の列番号;
var flag_open = true;//フラグ(カレンダー開閉)
function window.onload(){
var s=document.getElementById("FpSpread1");
s.onkeydown=skeyd;
s.onActiveCellChanged=ac;
s.onmouseup=mu;
}
function mydate_dclose(oDate, eArgs){
if(flag_open)
{
oDate.SetDroppedDown(true);
flag_open = false;
}
}
function mydate_dopen(oDate, eArgs){
flag_open = true;
}
function skeyd(){
//SPREADのキー入力をキャンセル
var s=document.getElementById("FpSpread1");
if(s.ActiveCol!=COLDATE)return;
if(event.keyCode!=9)//[Tab]キー以外キャンセル
event.cancelBubble=true;
}
function ac(){
//InputMan Dateにフォーカスを移動
if(event.Col!=COLDATE)return;
var s=document.getElementById("FpSpread1");
var d=FindIMControl(s.id+"_mydate"+event.Row+"_"+event.Col);
d.SetFocus();
}
function mu(){
//InputMan Dateにフォーカスを移動
var s=document.getElementById("FpSpread1");
if(s.ActiveCol!=COLDATE)return;
var d=FindIMControl(s.id+"_mydate"+s.ActiveRow+"_"+s.ActiveCol);
d.SetFocus();
}
</script>
【C# サンプルコード】
-------------------------------------
Webフォームクラス
-------------------------------------
private void Page_Load(object sender, System.EventArgs e)
{
string i;
int COLDATE =1;//日付列の列番号
if(IsPostBack)
{
//ポストバック時にDateコントロールのデータを確認します
for(int j=0;j<FpSpread1.Sheets[0].RowCount;j++)
{
i=Request.Form[FpSpread1.ID+"_mydate"+Convert.ToString(j)+"_"+Convert.ToString(COLDATE) + "_EditField"];
FpSpread1.Sheets[0].Cells[j,1].Value=i;
}
return;
}
FpSpread1.Sheets[0].Columns[1].CellType = new MyDateTypeCell();
FpSpread1.Sheets[0].Columns[1].Width = 160;
}
-------------------------------------
カスタム型セルクラス
-------------------------------------
using FarPoint.Web.Spread;
[Serializable()]
public class MyDateTypeCell : GeneralCellType
{
public override Control PaintCell(string id, TableCell parent, Appearance style, Inset margin, object value, bool upperLevel)
{
GrapeCity.Web.Input.IMDate.Date mydate = new GrapeCity.Web.Input.IMDate.Date();
mydate.DisplayFormat.Pattern = "ggg ee年 MM月 dd日";
mydate.Format.Pattern = "ggg ee年 MM月 dd日";
if (value != null)
mydate.Value = new GrapeCity.Web.Input.Core.DateTimeEx(DateTime.Parse(Convert.ToString(value)));
mydate.ID = "mydate" + id.Replace(",", "_");
mydate.ClientEvents.DropDownOpen = "mydate_dopen";
mydate.ClientEvents.DropDownClose = "mydate_dclose";
return mydate;
}
}
-------------------------------------
クライアント側スクリプト
-------------------------------------
VB サンプルコードでご紹介しているものと同様です。
Webフォームクラス
-------------------------------------
private void Page_Load(object sender, System.EventArgs e)
{
string i;
int COLDATE =1;//日付列の列番号
if(IsPostBack)
{
//ポストバック時にDateコントロールのデータを確認します
for(int j=0;j<FpSpread1.Sheets[0].RowCount;j++)
{
i=Request.Form[FpSpread1.ID+"_mydate"+Convert.ToString(j)+"_"+Convert.ToString(COLDATE) + "_EditField"];
FpSpread1.Sheets[0].Cells[j,1].Value=i;
}
return;
}
FpSpread1.Sheets[0].Columns[1].CellType = new MyDateTypeCell();
FpSpread1.Sheets[0].Columns[1].Width = 160;
}
-------------------------------------
カスタム型セルクラス
-------------------------------------
using FarPoint.Web.Spread;
[Serializable()]
public class MyDateTypeCell : GeneralCellType
{
public override Control PaintCell(string id, TableCell parent, Appearance style, Inset margin, object value, bool upperLevel)
{
GrapeCity.Web.Input.IMDate.Date mydate = new GrapeCity.Web.Input.IMDate.Date();
mydate.DisplayFormat.Pattern = "ggg ee年 MM月 dd日";
mydate.Format.Pattern = "ggg ee年 MM月 dd日";
if (value != null)
mydate.Value = new GrapeCity.Web.Input.Core.DateTimeEx(DateTime.Parse(Convert.ToString(value)));
mydate.ID = "mydate" + id.Replace(",", "_");
mydate.ClientEvents.DropDownOpen = "mydate_dopen";
mydate.ClientEvents.DropDownClose = "mydate_dclose";
return mydate;
}
}
-------------------------------------
クライアント側スクリプト
-------------------------------------
VB サンプルコードでご紹介しているものと同様です。
関連情報
キーワード
クライアント側スクリプト セル型
この文書は、以前は次のFAQ IDで公開されていました : 9179