SPREAD for WPF 4.0J - GcSpreadSheet
基本機能(コンボボックス型セル)
MESCIUS SPREAD for WPF 4.0J - GcSpreadSheet > 開発者ガイド > セル型 > コンボボックス型セル > 基本機能(コンボボックス型セル)

コンボボックス型セルの主な機能は次のとおりです。

編集

ユーザーによるコンボボックスの編集を有効にするには、 ComboBoxCellType クラスのIsEditable プロパティを True に設定します。既定では、コンボボックス型セルは、ユーザーが編集を開始すると開いているドロップダウン リストを閉じます。この動作は StaysOpenOnEdit プロパティで変更できます。

編集中の動作

オートセレクト機能

IsEditable プロパティに加えて、AutoSelect プロパティを True に設定すると、オートセレクト機能を利用することが可能です。
オートセレクト機能を有効にすると、コンボボックスに入力した場合、ドロップダウン リストが開き、入力したテキストに一致するアイテムが自動的に選択され、入力文字列が自動的に補完されます。

また、IsAutoSelectCaseSensitive プロパティで、アイテムを選択するときに大文字と小文字を区別するかどうかを設定することができます。

項目の設定

コンボボックス型セルをデータソースに連結し、項目のデータをデータソースから取得する方法と、データソースに非連結なデータを設定する方法があります。それぞれの方法について説明します。

ドロップダウン リストに複数列の項目を表示することもできます。詳しくは「マルチカラム コンボボックス」を参照してください。

データ連結による項目の設定

ItemsSource プロパティにデータソースを設定します。項目の表示に使用するフィールドのNameを ContentPath プロパティに、項目が選択されたとき、セルの値として使用するフィールドのNameを SelectedValuePath プロパティに設定します。次のサンプルコードは、コンボボックス型セルを ProductCollection に連結します。

サンプルコード
C#
コードのコピー
GrapeCity.Wpf.SpreadSheet.CellType.ComboBoxCellType comboBound = new GrapeCity.Wpf.SpreadSheet.CellType.ComboBoxCellType
  {
     ItemsSource = new ProductCollection(),
     ContentPath = "Name",
     SelectedValuePath = "ID"
  };
  GcSpreadSheet.Workbook.ActiveSheet.Columns[0].CellType = comboBound;

Visual Basic
コードのコピー
Dim comboBound As GrapeCity.Wpf.SpreadSheet.CellType.ComboBoxCellType = New GrapeCity.Wpf.SpreadSheet.CellType.ComboBoxCellType With {
        .ItemsSource = New ProductCollection(),
        .ContentPath = "Name",
        .SelectedValuePath = "ID"
}
GcSpreadSheet.Workbook.ActiveSheet.Columns(0).CellType = comboBound


Product および ProductCollection クラス(C#)

C#
コードのコピー
public class Product : System.ComponentModel.INotifyPropertyChanged
    {
        string id;
        string name;
        public string ID
        {
            set { id = value; NotifyPropertyChanged("ID"); }
            get { return id; }
        }
        public string Name
        {
            set { name = value; NotifyPropertyChanged("Name"); }
            get { return name; }
        }
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        protected void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
    internal class ProductCollection : System.Collections.ObjectModel.ObservableCollection<Product>
    {
        public ProductCollection()
        {
            Add(new Product() { ID = "CUPTNS0001", Name = "John Miller" });
            Add(new Product() { ID = "CUPTND0002", Name = "Tom Martin" });
            Add(new Product() { ID = "CUPTNF0003", Name = "Paul Walker" });
            Add(new Product() { ID = "CUPSCO0004", Name = "Harry Shang" });
            Add(new Product() { ID = "CUPSCA0005", Name = "Joe Jonas" });
        }
    }                

Product および ProductCollection クラス(Visual Basic)

Visual Basic
コードのコピー
Public Class Product
    Implements System.ComponentModel.INotifyPropertyChanged
    Private id As String
    Private name As String
    Public Property ID As String
        Set(ByVal value As String)
            id = value
            NotifyPropertyChanged("ID")
        End Set
        Get
            Return id
        End Get
    End Property
    Public Property Name As String
        Set(ByVal value As String)
            name = value
            NotifyPropertyChanged("Name")
        End Set
        Get
            Return name
        End Get
    End Property
    Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler
    Protected Sub NotifyPropertyChanged(ByVal propertyName As String)
        RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
    End Sub
End Class
Friend Class ProductCollection
    Inherits System.Collections.ObjectModel.ObservableCollection(Of Product)
    Public Sub New()
        Add(New Product() With {
            .ID = "CUPTNS0001",
            .Name = "John Miller"
        })
        Add(New Product() With {
            .ID = "CUPTND0002",
            .Name = "Tom Martin"
        })
        Add(New Product() With {
            .ID = "CUPTNF0003",
            .Name = "Paul Walker"
        })
        Add(New Product() With {
            .ID = "CUPSCO0004",
            .Name = "Harry Shang"
        })
        Add(New Product() With {
            .ID = "CUPSCA0005",
            .Name = "Joe Jonas"
        })
    End Sub
End Class

データソースに非連結な項目の設定

Items プロパティで項目のコレクションを参照し、Add メソッドで項目のデータを追加します。次のサンプルコードは、コンボボックス型セルにデータソースに非連結な項目を設定します。

サンプルコード
C#
コードのコピー
GrapeCity.Wpf.SpreadSheet.CellType.ComboBoxCellType comboUnbound = new GrapeCity.Wpf.SpreadSheet.CellType.ComboBoxCellType();
comboUnbound.Items.Add("日本語");
comboUnbound.Items.Add("韓国語");
comboUnbound.Items.Add("中国語");
comboUnbound.Items.Add("ドイツ語");
comboUnbound.Items.Add("フランス語");
GcSpreadSheet.Workbook.ActiveSheet.Columns[2].CellType = comboUnbound;

Visual Basic
コードのコピー
Dim comboUnbound As GrapeCity.Wpf.SpreadSheet.CellType.ComboBoxCellType = New GrapeCity.Wpf.SpreadSheet.CellType.ComboBoxCellType()
comboUnbound.Items.Add("日本語")
comboUnbound.Items.Add("韓国語")
comboUnbound.Items.Add("中国語")
comboUnbound.Items.Add("ドイツ語")
comboUnbound.Items.Add("フランス語")
GcSpreadSheet.Workbook.ActiveSheet.Columns(2).CellType = comboUnbound

セルに設定する値

項目がデータソースに連結されている場合、SelectedValuePath プロパティで設定したフィールドの値がセルの値となります。コンボボックス型セルがデータソースに非連結な場合、項目に表示された文字列がセルの値となります。なお、この設定は ValueType プロパティで変更できます。

スピンボタンの表示

SpinButtonVisibility プロパティで項目を送る、または戻すためのスピンボタンを表示できます。

関連トピック