mcpField
S
syncfusion-winforms-multicolumn-combobox

syncfusion-winforms-multicolumn-combobox

github.com/syncfusionデザイン・UI278 回インストール1 週間前に更新
リポジトリ

syncfusion-winforms-multicolumn-combobox について

Syncfusion WinForms 開発者向けに、MultiColumnComboBox で複数のデータ項目をドロップダウンに表示する方法を解説するスキルです。データバインディング、仮想表示、列をまたぐフィルタリングを扱い、複数項目を確認しながらレコードを選ぶ用途に適しています。

主な機能

  1. 01ドロップダウンに複数列を表示
  2. 02大規模データの仮想バインディング
  3. 03表示項目と値項目の設定
  4. 04列をまたぐカスタムフィルタリング
  5. 05列ヘッダーとテーマの設定
  6. 06内部グリッドによる列のカスタマイズ

活用シーン

  1. 01名前や部署から従業員を検索
  2. 02複数項目を確認して顧客レコードを選択
  3. 03商品カタログの項目を絞り込み
  4. 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.md
data-binding.md
event-handling.md
getting-started.md
multiple-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}");
    }
};

主なプロパティ

プロパティ型説明
DataSourceobjectコンボボックスのデータソース(DataTable、DataView、DataSet、List)
DisplayMemberstringテキスト領域に表示するデータソースのプロパティ名
ValueMemberstring値として使用するデータソースのプロパティ名
MultiColumnbool複数列の有効/無効を切り替えます(既定値は true)
ShowColumnHeaderboolドロップダウンの列ヘッダーを表示または非表示にします
AllowFilteringboolカスタムフィルタリングを有効にします
FilterPredicate項目のフィルタリングに使用するカスタムフィルター述語
StyleVisualStyleビジュアルテーマ(Office2003、OfficeXP、VS2005、Office2007、Metro、Office2016*)
Office2007ColorThemeOffice2007ThemeOffice 2007 のカラースキーム(Blue、Silver、Black、Managed)
AlphaBlendSelectionColorColorアルファブレンドによる選択ハイライトの色
DropDownWidthintドロップダウンポップアップの幅(ピクセル単位)
ListBox.GridGridListControl列をカスタマイズするための、基になるグリッドへのアクセス

一般的なユースケース

  1. 従業員検索:ドロップダウンに ID、氏名、部署、役職を表示して従業員を選択します
  2. 顧客選択:複数のフィールド(氏名、会社、連絡先、国)を含む顧客レコードを表示します
  3. 製品カタログ:コード、名前、カテゴリ、価格、在庫を表示して製品を選択します
  4. 請求書の明細項目:SKU、説明、単価、在庫数量を表示して項目を選択します
  5. データベースレコードの選択:複数のフィールドを持つデータベースレコードから選択する必要がある、あらゆるシナリオ
  6. マスター詳細フォーム:ドロップダウンに関連データを表示しながら親レコードを選択します
  7. データ入力支援:関連フィールドの情報を表示する検索ヘルパー
  8. フィルター検索:複数列を対象とした入力中検索で、すばやく選択できます

追加リソース

コメント