syncfusion-winforms-multicolumn-combobox について
Syncfusion WinForms 開発者向けに、MultiColumnComboBox で複数のデータ項目をドロップダウンに表示する方法を解説するスキルです。データバインディング、仮想表示、列をまたぐフィルタリングを扱い、複数項目を確認しながらレコードを選ぶ用途に適しています。
主な機能
- 01ドロップダウンに複数列を表示
- 02大規模データの仮想バインディング
- 03表示項目と値項目の設定
- 04列をまたぐカスタムフィルタリング
- 05列ヘッダーとテーマの設定
- 06内部グリッドによる列のカスタマイズ
活用シーン
- 01名前や部署から従業員を検索
- 02複数項目を確認して顧客レコードを選択
- 03商品カタログの項目を絞り込み
- 04マスター詳細フォームで関連レコードを選択
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ syncfusion/ winforms-ui-components-skills --skill syncfusion-winforms-multicolumn-comboboxインストール後、Claude Code で/syncfusion-winforms-multicolumn-comboboxを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/appearance-styling.mddata-binding.mdevent-handling.mdgetting-started.mdmultiple-columns.md詳細
複数列コンボボックス(MultiColumnComboBox)の実装
大規模なデータセットを瞬時に読み込める仮想データバインディングに対応し、ドロップダウンリストに複数の列を表示する、Windows Forms 用の高度なコンボボックスコントロールです。
このスキルを使う場面
次のような場合にこのスキルを使用してください。
- 複数列のドロップダウン:ドロップダウン内に複数のデータフィールドを表示する(ドロップダウン内の DataGridView のような表示)
- 大規模データセットのバインディング:パフォーマンス向上のために仮想レンダリングを使い、大規模なデータソースにバインドする
- データ検索:ドロップダウンに関連フィールド(ID、名前、説明、カテゴリ)を表示する
- エンティティの選択:複数のプロパティを表示してレコードを選択する
- フィルター付きドロップダウン:すべての列に対してカスタムフィルターを適用する
- スタイル付きコンボボックス:ドロップダウンコントロールに Office テーマ(2003~2019)を適用する
- DataSource バインディング:DataSource、DisplayMember、ValueMember プロパティを使用する
- ComboBox の置き換え:標準の ComboBox を、より豊富な複数列表示に置き換える
コンポーネントの概要
MultiColumnComboBox は ComboBoxBase をベースとしており、次の機能を提供します。
- ドロップダウンリスト内の複数列表示
- 大規模なデータセット向けの仮想データバインディング(瞬時に読み込み)
- データソース内のすべてのフィールドの自動表示
- DataSource、DisplayMember、ValueMember プロパティ
- ShowColumnHeader プロパティによる列ヘッダーの表示
- すべての列を対象としたカスタムフィルター
- グリッドベースのドロップダウン(GridListControl)
- 項目の手動追加には非対応(データバインディングのみ)
主な機能:
- データをバインドするための
DataSourceプロパティ(DataTable、DataView、DataSet、List) - 列を選択するための
DisplayMemberとValueMember - 列ヘッダーを表示するための
ShowColumnHeaderプロパティ - カスタムフィルターを有効にするための
AllowFilteringプロパティ - Office のビジュアルテーマを適用するための
Styleプロパティ - 選択時の表示をカスタマイズするための
AlphaBlendSelectionColor - ドロップダウンの幅を制御するための
DropDownWidth
ドキュメントとナビゲーションガイド
はじめに
📄 参照: references/getting-started.md
読むタイミング: 新しい実装を始めるとき、初回セットアップ時、基本的なコントロールを作成するとき
掲載トピック:
- アセンブリと名前空間の要件(Syncfusion.Windows.Forms.Tools)
- デザイナーから追加する方法(ツールボックスからドラッグ&ドロップ)
- コードから追加する方法(プログラムによる作成)
- MultiColumnComboBox の基本的なインスタンス化
- フォームとの統合
- 初期セットアップの手順
データバインディング
📄 参照: references/data-binding.md
読むタイミング: データソースにバインドするとき、DataSource/DisplayMember/ValueMember を設定するとき、データベースや XML からデータを読み込むとき
掲載トピック:
- DataSource、DisplayMember、ValueMember プロパティ
- データソースとしての DataView
- データベースでの OleDBDataAdapter の使用
- 型付き DataSet へのデータの読み込み
- XML データの読み込み(ReadXml)
- 特定の列を非表示にする方法(Grid.Model.Cols.Hidden)
- 選択した項目の DataRowView へのアクセス
- データバインディングの完全な例
複数列の設定
📄 参照: references/multiple-columns.md
読むタイミング: 列の設定、複数列モードの有効化/無効化、フィルタリング、ドロップダウン幅の設定を行うとき
掲載トピック:
- MultiColumn プロパティ(列の有効化/無効化)
- ShowColumnHeader プロパティ(列ヘッダーの表示)
- AlphaBlendSelectionColor(選択時のハイライト色)
- DropDownWidth プロパティ(ドロップダウン幅の設定)
- AllowFiltering プロパティ(カスタムフィルターの有効化)
- Filter プロパティ(述語ベースのフィルタリング)
- カスタムフィルターの実装
- 既定のフィルター動作(DisplayMember の StartsWith)
外観とスタイル
📄 参照: references/appearance-styling.md
読むタイミング: ビジュアルテーマの適用、外観のカスタマイズ、Office テーマの設定
取り上げるトピック:
- Style プロパティ(9 種類のビジュアルスタイル)
- Office2003、OfficeXP、VS2005 スタイル
- カラースキーム(Blue、Silver、Black)を使用した Office2007
- Metro、Office2016 のバリエーション(Colorful、White、Black、DarkGray)
- Office2007ColorTheme プロパティ
- ApplyManagedColors メソッドを使用したカスタムカラー
- 管理テーマの設定
- スタイル設定の完全な例
イベント処理
📄 参照: references/event-handling.md
読むタイミング: 選択変更の処理、ユーザー操作への応答、選択したデータへのアクセス
取り上げるトピック:
- SelectionChangedCommitted イベント
- SelectedValueChanged イベント
- SelectedIndexChanged イベント
- イベント発生のシナリオと順序
- 選択した項目データへのアクセス(DataRowView)
- 選択に基づくテキストの設定
- イベントハンドラーの完全な例
クイックスタートの例
データバインディングを使用した複数列の従業員セレクター
using Syncfusion.Windows.Forms.Tools;
using System.Data;
// Create DataTable with employee data
DataTable employeeData = new DataTable("Employees");
employeeData.Columns.Add("EmployeeID");
employeeData.Columns.Add("FirstName");
employeeData.Columns.Add("LastName");
employeeData.Columns.Add("Department");
employeeData.Columns.Add("Position");
// Add sample data
employeeData.Rows.Add("1001", "John", "Smith", "Engineering", "Developer");
employeeData.Rows.Add("1002", "Mary", "Johnson", "Sales", "Manager");
employeeData.Rows.Add("1003", "Robert", "Williams", "HR", "Specialist");
employeeData.Rows.Add("1004", "Sarah", "Davis", "Marketing", "Coordinator");
// Create and configure MultiColumnComboBox
MultiColumnComboBox employeeCombo = new MultiColumnComboBox();
employeeCombo.Location = new Point(20, 20);
employeeCombo.Size = new Size(300, 21);
// Bind data
employeeCombo.DataSource = employeeData;
employeeCombo.DisplayMember = "FirstName";
employeeCombo.ValueMember = "EmployeeID";
// Configure appearance
employeeCombo.ShowColumnHeader = true;
employeeCombo.Style = VisualStyle.Office2016Colorful;
employeeCombo.DropDownWidth = 500;
// Add to form
this.Controls.Add(employeeCombo);
Imports Syncfusion.Windows.Forms.Tools
Imports System.Data
' Create DataTable with employee data
Dim employeeData As New DataTable("Employees")
employeeData.Columns.Add("EmployeeID")
employeeData.Columns.Add("FirstName")
employeeData.Columns.Add("LastName")
employeeData.Columns.Add("Department")
employeeData.Columns.Add("Position")
' Add sample data
employeeData.Rows.Add("1001", "John", "Smith", "Engineering", "Developer")
employeeData.Rows.Add("1002", "Mary", "Johnson", "Sales", "Manager")
employeeData.Rows.Add("1003", "Robert", "Williams", "HR", "Specialist")
employeeData.Rows.Add("1004", "Sarah", "Davis", "Marketing", "Coordinator")
' Create and configure MultiColumnComboBox
Dim employeeCombo As New MultiColumnComboBox()
employeeCombo.Location = New Point(20, 20)
employeeCombo.Size = New Size(300, 21)
' Bind data
employeeCombo.DataSource = employeeData
employeeCombo.DisplayMember = "FirstName"
employeeCombo.ValueMember = "EmployeeID"
' Configure appearance
employeeCombo.ShowColumnHeader = True
employeeCombo.Style = VisualStyle.Office2016Colorful
employeeCombo.DropDownWidth = 500
' Add to form
Me.Controls.Add(employeeCombo)
一般的なパターン
パターン 1:OleDbDataAdapter を使用したデータベース検索
using System.Data.OleDb;
// Create data adapter and dataset
OleDbDataAdapter adapter = new OleDbDataAdapter(
"SELECT CustomerID, CompanyName, ContactName, Country FROM Customers",
connectionString);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, "Customers");
// Bind to MultiColumnComboBox
multiColumnComboBox1.DataSource = dataSet.Tables["Customers"];
multiColumnComboBox1.DisplayMember = "CompanyName";
multiColumnComboBox1.ValueMember = "CustomerID";
multiColumnComboBox1.ShowColumnHeader = true;
multiColumnComboBox1.DropDownWidth = 600;
パターン 2:任意の列によるカスタムフィルタリング
// Enable filtering
multiColumnComboBox1.AllowFiltering = true;
// Handle text changed for custom filter
multiColumnComboBox1.TextChanged += (sender, e) =>
{
multiColumnComboBox1.Filter = FilterRecords;
};
// Custom filter predicate
private bool FilterRecords(object o)
{
var item = o as DataRowView;
if (item != null)
{
string searchText = multiColumnComboBox1.TextBox.Text.ToLower();
// Filter by any column
return item["ProductName"].ToString().ToLower().Contains(searchText) ||
item["Category"].ToString().ToLower().Contains(searchText);
}
return false;
}
パターン 3:特定の列を非表示にして選択データを取得
// Load data
DataTable products = GetProductData();
multiColumnComboBox1.DataSource = products;
multiColumnComboBox1.DisplayMember = "ProductName";
multiColumnComboBox1.ValueMember = "ProductID";
// Hide internal ID columns
multiColumnComboBox1.ListBox.Grid.Model.Cols.Hidden["ProductID"] = true;
multiColumnComboBox1.ListBox.Grid.Model.Cols.Hidden["SupplierID"] = true;
// Handle selection to get all column data
multiColumnComboBox1.SelectedValueChanged += (sender, e) =>
{
if (multiColumnComboBox1.SelectedIndex != -1)
{
DataRowView row = multiColumnComboBox1.Items[multiColumnComboBox1.SelectedIndex] as DataRowView;
string productName = row["ProductName"].ToString();
decimal price = Convert.ToDecimal(row["Price"]);
string category = row["Category"].ToString();
MessageBox.Show($"Selected: {productName}\nPrice: {price:C}\nCategory: {category}");
}
};
主なプロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
| DataSource | object | コンボボックスのデータソース(DataTable、DataView、DataSet、List) |
| DisplayMember | string | テキスト領域に表示するデータソースのプロパティ名 |
| ValueMember | string | 値として使用するデータソースのプロパティ名 |
| MultiColumn | bool | 複数列の有効/無効を切り替えます(既定値は true) |
| ShowColumnHeader | bool | ドロップダウンの列ヘッダーを表示または非表示にします |
| AllowFiltering | bool | カスタムフィルタリングを有効にします |
| Filter | Predicate | 項目のフィルタリングに使用するカスタムフィルター述語 |
| Style | VisualStyle | ビジュアルテーマ(Office2003、OfficeXP、VS2005、Office2007、Metro、Office2016*) |
| Office2007ColorTheme | Office2007Theme | Office 2007 のカラースキーム(Blue、Silver、Black、Managed) |
| AlphaBlendSelectionColor | Color | アルファブレンドによる選択ハイライトの色 |
| DropDownWidth | int | ドロップダウンポップアップの幅(ピクセル単位) |
| ListBox.Grid | GridListControl | 列をカスタマイズするための、基になるグリッドへのアクセス |
一般的なユースケース
- 従業員検索:ドロップダウンに ID、氏名、部署、役職を表示して従業員を選択します
- 顧客選択:複数のフィールド(氏名、会社、連絡先、国)を含む顧客レコードを表示します
- 製品カタログ:コード、名前、カテゴリ、価格、在庫を表示して製品を選択します
- 請求書の明細項目:SKU、説明、単価、在庫数量を表示して項目を選択します
- データベースレコードの選択:複数のフィールドを持つデータベースレコードから選択する必要がある、あらゆるシナリオ
- マスター詳細フォーム:ドロップダウンに関連データを表示しながら親レコードを選択します
- データ入力支援:関連フィールドの情報を表示する検索ヘルパー
- フィルター検索:複数列を対象とした入力中検索で、すばやく選択できます