MESCIUS SPREAD for ASP.NET 10.0J > 開発者の手引き > セル型 > グラフィカルなセル型 > マルチカラムコンボボックス型セル |
マルチコンボボックス型セルは、コンボボックス型セルと同様に選択項目を示すドロップダウンリストを表示し、ユーザーは任意の項目を選択できます。ただし、マルチコンボボックス型セルは、ドロップダウンリストを複数列で表示します。
このセル型の作成や設定は、MultiColumnComboBoxCellType クラスを使用して行われます。
マルチコンボボックス型セルのドロップダウンリストの項目を設定するには、セルをデータソースに連結する必要があります。データソースに連結するには、以下のプロパティを使用します。
複数列のうち、どの列を編集対象(セルに表示)するかは、ColumnEdit プロパティまたはColumnEditName プロパティを使用して設定します。どの列をセルのValue プロパティとして取得できる値とするかは、DataColumn プロパティまたはDataColumnName プロパティで指定します。
また、リストボックスの表示位置やサイズ、各列の幅も設定可能で、以下のプロパティを使用します。
リストに表示する項目を、ユーザーが入力した値に応じてフィルタリングできます。ColumnEdit プロパティまたはColumnEditName プロパティで指定したデータソースの列の値が、フィルタリングの対象となります。
次の図は、ユーザーが入力した文字から始まる項目だけがリストに表示されている様子を表しています。
マルチカラムコンボボックスでフィルタリングを有効にするには、フィルタリングに関する動作を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