【セル型】セルに編集可能なリストを表示したい
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
1つのセルに複数の独立したデータを編集可能な形式で表示したい場合、製品で提供されるセル型でこの機能を直接実現するものはありません。
ただ、既存のセル型を継承する独自のセル型を開発することで実現できます。下記ではセルの中に複数のテキストボックスを表示するカスタムセル型を作成しています。
メモ
【VB サンプルコード】
【C# サンプルコード】
ただ、既存のセル型を継承する独自のセル型を開発することで実現できます。下記ではセルの中に複数のテキストボックスを表示するカスタムセル型を作成しています。

- 既存クラスの継承は.NETアプリケーション開発における一般的な手法です。継承方法の詳細についてはMSDNライブラリをご参照ください。(既存クラスのカスタマイズ方法については弊社サポートサービス対象外となります)
【VB サンプルコード】
------------------------
Webフォームクラス
------------------------
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then
Return
End If
Dim lt As New MyListType
FpSpread1.Sheets(0).Cells(0, 0).CellType = lt
FpSpread1.Sheets(0).Cells(0, 0).Value = "曙,小錦,武蔵丸"
FpSpread1.Sheets(0).DefaultRowHeight = FpSpread1.Sheets(0).DefaultRowHeight * 4
End Sub
------------------------------------
カスタムセル型クラス(MyListType)
------------------------------------
Public Class MyListType
Inherits FarPoint.Web.Spread.GeneralCellType
Private items As String()
Public Sub New()
items = Nothing
End Sub
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
Dim str As String = Convert.ToString(value)
items = str.Split(Convert.ToChar(","))
Dim cell As TableCell
Dim row As TableRow
Dim table As New Table()
Dim i As Integer
For i = 0 To items.Length - 1
cell = New TableCell()
cell.Text = items(i)
If upperLevel Then
cell.Attributes.Add("isbox", "true")
row = New TableRow()
row.Cells.Add(cell)
table.Rows.Add(row)
cell.Font.Size = FontUnit.XSmall
cell.Width = Unit.Percentage(100)
row.Width = Unit.Percentage(100)
table.Width = Unit.Percentage(100)
End If
Next
Return table
End Function
Public Overrides ReadOnly Property EditorClientScriptUrl() As String
Get
Return "mylisteditor_7039.htc"
End Get
End Property
Public Overrides ReadOnly Property RendererClientScriptUrl() As String
Get
Return "mylistrender_7039.htc"
End Get
End Property
Public Overrides Function GetEditorControl(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
Dim tb As TextBox
Dim cell As TableCell
Dim row As TableRow
Dim table As New Table()
Dim i As Integer
For i = 0 To items.Length - 1
items(i) = items(i).Trim()
If Not (items(i) = Nothing) And Not (items(i) = "") Then
tb = New TextBox()
tb.Text = items(i)
If upperLevel Then
tb.Attributes.Add("isbox", "true")
End If
cell = New TableCell()
cell.Controls.Add(tb)
row = New TableRow()
row.Cells.Add(cell)
table.Rows.Add(row)
tb.Width = Unit.Percentage(100)
cell.Width = Unit.Percentage(100)
row.Width = Unit.Percentage(100)
table.Width = Unit.Percentage(100)
End If
Next
Return table
End Function
End Class
-----------------------------------------------
mylisteditor.htc
-----------------------------------------------
<PUBLIC:COMPONENT>
<PUBLIC:PROPERTY NAME="value">
<get internalName="getValue"/>
<!--<put internalName="setValue"/>-->
</PUBLIC:PROPERTY>
<PUBLIC:METHOD NAME="isValid">
</PUBLIC:METHOD>
<PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="init()" />
</PUBLIC:COMPONENT>
<script language="javascript">
var items=new Array();
function init() {
var count=element.all.length;
var j=0;
for(var i=0;i<count;i++){
if(element.all[i].isbox=="true"){
items[j]=element.all[i];
j++;
}
}
}
function getValue() {
var ret="";
for(var i=0;i<items.length;i++){
if(items[i]!=null||items[i]!=""){
if(i==items.length-1)
ret+=items[i].value;
else
ret+=items[i].value+",";
}
}
return ret;
}
function isValid(val) {
return "";
}
</script>
------------------------------------------------
mylistrender.htc
------------------------------------------------
<PUBLIC:COMPONENT>
<PUBLIC:PROPERTY NAME="value">
<!--<get internalName="getValue"/>-->
<put internalName="setValue"/>
</PUBLIC:PROPERTY>
</PUBLIC:COMPONENT>
<script language=javascript>
var items=new Array();
function setValue(val){
if(val!=null && val!=""){
items=val.split(',');
var count=element.all.length;
var j=0;
for(var i=0;i<count;i++){
if(element.all[i].isbox=="true"){
element.all[i].innerText=items[j];
j++;
}
}
}
}
</script>
Webフォームクラス
------------------------
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then
Return
End If
Dim lt As New MyListType
FpSpread1.Sheets(0).Cells(0, 0).CellType = lt
FpSpread1.Sheets(0).Cells(0, 0).Value = "曙,小錦,武蔵丸"
FpSpread1.Sheets(0).DefaultRowHeight = FpSpread1.Sheets(0).DefaultRowHeight * 4
End Sub
------------------------------------
カスタムセル型クラス(MyListType)
------------------------------------
Inherits FarPoint.Web.Spread.GeneralCellType
Private items As String()
Public Sub New()
items = Nothing
End Sub
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
Dim str As String = Convert.ToString(value)
items = str.Split(Convert.ToChar(","))
Dim cell As TableCell
Dim row As TableRow
Dim table As New Table()
Dim i As Integer
For i = 0 To items.Length - 1
cell = New TableCell()
cell.Text = items(i)
If upperLevel Then
cell.Attributes.Add("isbox", "true")
row = New TableRow()
row.Cells.Add(cell)
table.Rows.Add(row)
cell.Font.Size = FontUnit.XSmall
cell.Width = Unit.Percentage(100)
row.Width = Unit.Percentage(100)
table.Width = Unit.Percentage(100)
End If
Next
Return table
End Function
Public Overrides ReadOnly Property EditorClientScriptUrl() As String
Get
Return "mylisteditor_7039.htc"
End Get
End Property
Public Overrides ReadOnly Property RendererClientScriptUrl() As String
Get
Return "mylistrender_7039.htc"
End Get
End Property
Public Overrides Function GetEditorControl(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
Dim tb As TextBox
Dim cell As TableCell
Dim row As TableRow
Dim table As New Table()
Dim i As Integer
For i = 0 To items.Length - 1
items(i) = items(i).Trim()
If Not (items(i) = Nothing) And Not (items(i) = "") Then
tb = New TextBox()
tb.Text = items(i)
If upperLevel Then
tb.Attributes.Add("isbox", "true")
End If
cell = New TableCell()
cell.Controls.Add(tb)
row = New TableRow()
row.Cells.Add(cell)
table.Rows.Add(row)
tb.Width = Unit.Percentage(100)
cell.Width = Unit.Percentage(100)
row.Width = Unit.Percentage(100)
table.Width = Unit.Percentage(100)
End If
Next
Return table
End Function
End Class
-----------------------------------------------
mylisteditor.htc
-----------------------------------------------
<PUBLIC:COMPONENT>
<PUBLIC:PROPERTY NAME="value">
<get internalName="getValue"/>
<!--<put internalName="setValue"/>-->
</PUBLIC:PROPERTY>
<PUBLIC:METHOD NAME="isValid">
</PUBLIC:METHOD>
<PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="init()" />
</PUBLIC:COMPONENT>
<script language="javascript">
var items=new Array();
function init() {
var count=element.all.length;
var j=0;
for(var i=0;i<count;i++){
if(element.all[i].isbox=="true"){
items[j]=element.all[i];
j++;
}
}
}
function getValue() {
var ret="";
for(var i=0;i<items.length;i++){
if(items[i]!=null||items[i]!=""){
if(i==items.length-1)
ret+=items[i].value;
else
ret+=items[i].value+",";
}
}
return ret;
}
function isValid(val) {
return "";
}
</script>
------------------------------------------------
mylistrender.htc
------------------------------------------------
<PUBLIC:COMPONENT>
<PUBLIC:PROPERTY NAME="value">
<!--<get internalName="getValue"/>-->
<put internalName="setValue"/>
</PUBLIC:PROPERTY>
</PUBLIC:COMPONENT>
<script language=javascript>
var items=new Array();
function setValue(val){
if(val!=null && val!=""){
items=val.split(',');
var count=element.all.length;
var j=0;
for(var i=0;i<count;i++){
if(element.all[i].isbox=="true"){
element.all[i].innerText=items[j];
j++;
}
}
}
}
</script>
【C# サンプルコード】
------------------------
Webフォームクラス
------------------------
private void Page_Load(object sender, System.EventArgs e)
{
if (IsPostBack)
{
return;
}
MyListType lt=new MyListType();
FpSpread1.Sheets[0].Cells[0,0].CellType=lt;
FpSpread1.Sheets[0].Cells[0,0].Value="曙,小錦,武蔵丸";
FpSpread1.Sheets[0].DefaultRowHeight=FpSpread1.Sheets[0].DefaultRowHeight*4;
}
------------------------------------
カスタムセル型クラス(MyListType)
------------------------------------
[Serializable()]
public class MyListType:GeneralCellType
{
private string[] items;
public MyListType()
{
items=null;
}
public override System.Web.UI.Control PaintCell(string id, System.Web.UI.WebControls.TableCell parent, Appearance style, Inset margin, object value, bool upperLevel)
{
string str=Convert.ToString(value);
items=str.Split(',');
TableCell cell;
TableRow row;
Table table=new Table();
for(int i=0;i<items.Length;i++)
{
cell=new TableCell();
cell.Text=items[i];
if(upperLevel)
cell.Attributes.Add("isbox","true");
row=new TableRow();
row.Cells.Add(cell);
table.Rows.Add(row);
cell.Font.Size=FontUnit.XSmall;
cell.Width=Unit.Percentage(100);
row.Width=Unit.Percentage(100);
table.Width=Unit.Percentage(100);
}
return table;
}
public override string EditorClientScriptUrl
{
get
{
return "mylisteditor.htc";
}
}
public override string RendererClientScriptUrl
{
get
{
return "mylistrender.htc";
}
}
public override System.Web.UI.Control GetEditorControl(string id, System.Web.UI.WebControls.TableCell parent, Appearance style, Inset margin, object val, bool upperLevel)
{
TextBox tb;
TableCell cell;
TableRow row;
Table table=new Table();
for(int i=0;i<items.Length;i++)
{
items[i]=items[i].Trim();
if(items[i]!=null && items[i]!="")
{
tb=new TextBox();
tb.Text=items[i];
if(upperLevel)
tb.Attributes.Add("isbox","true");
cell=new TableCell();
cell.Controls.Add(tb);
row=new TableRow();
row.Cells.Add(cell);
table.Rows.Add(row);
tb.Width=Unit.Percentage(100);
cell.Width=Unit.Percentage(100);
row.Width=Unit.Percentage(100);
table.Width=Unit.Percentage(100);
}
}
return table;
}
}
-----------------------------------------------
mylisteditor.htc
-----------------------------------------------
VB サンプルと同様です。
------------------------------------------------
mylistrender.htc
------------------------------------------------
VB サンプルと同様です。
Webフォームクラス
------------------------
private void Page_Load(object sender, System.EventArgs e)
{
if (IsPostBack)
{
return;
}
MyListType lt=new MyListType();
FpSpread1.Sheets[0].Cells[0,0].CellType=lt;
FpSpread1.Sheets[0].Cells[0,0].Value="曙,小錦,武蔵丸";
FpSpread1.Sheets[0].DefaultRowHeight=FpSpread1.Sheets[0].DefaultRowHeight*4;
}
------------------------------------
カスタムセル型クラス(MyListType)
------------------------------------
[Serializable()]
public class MyListType:GeneralCellType
{
private string[] items;
public MyListType()
{
items=null;
}
public override System.Web.UI.Control PaintCell(string id, System.Web.UI.WebControls.TableCell parent, Appearance style, Inset margin, object value, bool upperLevel)
{
string str=Convert.ToString(value);
items=str.Split(',');
TableCell cell;
TableRow row;
Table table=new Table();
for(int i=0;i<items.Length;i++)
{
cell=new TableCell();
cell.Text=items[i];
if(upperLevel)
cell.Attributes.Add("isbox","true");
row=new TableRow();
row.Cells.Add(cell);
table.Rows.Add(row);
cell.Font.Size=FontUnit.XSmall;
cell.Width=Unit.Percentage(100);
row.Width=Unit.Percentage(100);
table.Width=Unit.Percentage(100);
}
return table;
}
public override string EditorClientScriptUrl
{
get
{
return "mylisteditor.htc";
}
}
public override string RendererClientScriptUrl
{
get
{
return "mylistrender.htc";
}
}
public override System.Web.UI.Control GetEditorControl(string id, System.Web.UI.WebControls.TableCell parent, Appearance style, Inset margin, object val, bool upperLevel)
{
TextBox tb;
TableCell cell;
TableRow row;
Table table=new Table();
for(int i=0;i<items.Length;i++)
{
items[i]=items[i].Trim();
if(items[i]!=null && items[i]!="")
{
tb=new TextBox();
tb.Text=items[i];
if(upperLevel)
tb.Attributes.Add("isbox","true");
cell=new TableCell();
cell.Controls.Add(tb);
row=new TableRow();
row.Cells.Add(cell);
table.Rows.Add(row);
tb.Width=Unit.Percentage(100);
cell.Width=Unit.Percentage(100);
row.Width=Unit.Percentage(100);
table.Width=Unit.Percentage(100);
}
}
return table;
}
}
-----------------------------------------------
mylisteditor.htc
-----------------------------------------------
VB サンプルと同様です。
------------------------------------------------
mylistrender.htc
------------------------------------------------
VB サンプルと同様です。
キーワード
クライアント側スクリプト セル型
この文書は、以前は次のFAQ IDで公開されていました : 9138