マルチコンボボックス型セルは、コンボボックス型セルと同様に選択項目を示すドロップダウンリストを表示し、ユーザーは任意の項目を選択できます。ただし、マルチコンボボックス型セルは、ドロップダウンリストを複数列で表示します。
このセル型の作成や設定は、MultiColumnComboBoxCellType クラスを使用して行われます。

マルチコンボボックス型セルのドロップダウンリストの項目を設定するには、セルをデータソースに連結する必要があります。データソースに連結するには、以下のプロパティを使用します。
複数列のうち、どの列を編集対象(セルに表示)するかは、ColumnEdit プロパティまたはColumnEditName プロパティを使用して設定します。どの列をセルのValue プロパティとして取得できる値とするかは、DataColumn プロパティまたはDataColumnName プロパティで指定します。
また、リストボックスの表示位置やサイズ、各列の幅も設定可能で、以下のプロパティを使用します。
表示項目のフィルタリング
リストに表示する項目を、ユーザーが入力した値に応じてフィルタリングできます。ColumnEdit プロパティまたはColumnEditName プロパティで指定したデータソースの列の値が、フィルタリングの対象となります。
次の図は、ユーザーが入力した文字から始まる項目だけがリストに表示されている様子を表しています。

マルチカラムコンボボックスでフィルタリングを有効にするには、フィルタリングに関する動作をAutoFilterクラスを使用して設定し、AutoFilterプロパティに設定します。
設定方法
- MultiColumnComboBoxCellType クラスのインスタンスを作成し、マルチカラムコンボボックス型セルを定義します。
- 連結するデータソースを作成します。
- DataSource あるいはDataSourceID プロパティを使用してセルとデータソースを連結します。
- 表示する列および値として扱う列をを設定します。
- AutoFilterクラスのインスタンスを生成し、AutoFilterプロパティに設定にします。
- このセル型をセルに割り当てます。
サンプルコード
次のサンプルコードは、マルチカラムコンボボックス型セルを表示します。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
FarPoint.Web.Spread.MultiColumnComboBoxCellType mcombo = new FarPoint.Web.Spread.MultiColumnComboBoxCellType();
mcombo.DataSource = CreateDataSource();
mcombo.DataColumnName = "No";
mcombo.ColumnEditName = "Item";
mcombo.ShowButton = true;
mcombo.ListWidth = 222;
mcombo.ListHeight = 109;
mcombo.ColumnWidths = new int[] { 91, 130 };
mcombo.UseValue = true;
mcombo.AutoFilter = new FarPoint.Web.Spread.AutoFilter
{
Enabled = true,
MatchingSource = FarPoint.Web.Spread.FilterMatchingSource.AllColumns,
MinPrefixLength = 1,
MaxFilteredItem = 10
};
FpSpread1.Sheets[0].Columns[0].CellType = mcombo;
}
public System.Data.DataSet CreateDataSource()
{
System.Data.DataSet ds = new System.Data.DataSet();
System.Data.DataTable dt = default(System.Data.DataTable);
dt = new System.Data.DataTable();
dt.Columns.Add(new System.Data.DataColumn("No", typeof(int)));
dt.Columns.Add(new System.Data.DataColumn("Item", typeof(string)));
dt.Rows.Add(new object[] {1,"ASP.NET"});
dt.Rows.Add(new object[] {2,"Windows Forms"});
dt.Rows.Add(new object[] {3, "WPF"});
ds.Tables.Add(dt);
return ds;
}
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then
Return
End If
Dim mcombo As New FarPoint.Web.Spread.MultiColumnComboBoxCellType()
mcombo.DataSource = CreateDataSource()
mcombo.DataColumnName = "No"
mcombo.ColumnEditName = "Item"
mcombo.ShowButton = True
mcombo.ListWidth = 222
mcombo.ListHeight = 109
mcombo.ColumnWidths = New Integer() {91, 130}
mcombo.UseValue = True
mcombo.AutoFilter = New FarPoint.Web.Spread.AutoFilter With {
.Enabled = True,
.MatchingSource = FarPoint.Web.Spread.FilterMatchingSource.AllColumns,
.MinPrefixLength = 1,
.MaxFilteredItem = 10
}
FpSpread1.Sheets(0).Columns(0).CellType = mcombo
End Sub
Function CreateDataSource() As Data.DataSet
Dim ds As New Data.DataSet
Dim dt As Data.DataTable
dt = New Data.DataTable
dt.Columns.Add(New Data.DataColumn("No", GetType(Integer)))
dt.Columns.Add(New Data.DataColumn("Item", GetType(String)))
dt.Rows.Add(New Object() {1, "ASP.NET"})
dt.Rows.Add(New Object() {2, "Windows Forms"})
dt.Rows.Add(New Object() {3, "WPF"})
ds.Tables.Add(dt)
Return ds
End Function
関連トピック