在 DataGridView 中加入 ComboBox

March 10, 2020

本文介紹 C# Winform 中的 DataGridView 如何增加 ComboBox 欄位。

在 DataGridView 中加入 ComboBox

  • 從程式碼動態加入 DataGridViewComboBoxColumn 至 DataGridView 中。這是一種可以用於 DataGridView 的 ComboBox 元件。
  • DataGridViewComboBoxColumn 的事件偵測,需先設定 DataGridView 本身的 EditingControlShowing 事件,並在事件內部再設定 ComboBox 的事件,如 SelectedIndexChanged。

程式碼

以下取自參考資料中的 Microsoft Docs。

private DataGridView dataGridView1 = new DataGridView();

private void AddColorColumn()
{
    DataGridViewComboBoxColumn comboBoxColumn =
        new DataGridViewComboBoxColumn();
    comboBoxColumn.Items.AddRange(
        Color.Red, Color.Yellow, Color.Green, Color.Blue);
    comboBoxColumn.ValueType = typeof(Color);
    dataGridView1.Columns.Add(comboBoxColumn);
    dataGridView1.EditingControlShowing +=
        new DataGridViewEditingControlShowingEventHandler(
        dataGridView1_EditingControlShowing);
}

private void dataGridView1_EditingControlShowing(object sender,
    DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox combo = e.Control as ComboBox;
    if (combo != null)
    {
        // Remove an existing event-handler, if present, to avoid 
        // adding multiple handlers when the editing control is reused.
        combo.SelectedIndexChanged -=
            new EventHandler(ComboBox_SelectedIndexChanged);

        // Add the event handler. 
        combo.SelectedIndexChanged +=
            new EventHandler(ComboBox_SelectedIndexChanged);
    }
}

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    ((ComboBox)sender).BackColor = (Color)((ComboBox)sender).SelectedItem;
}

參考資料

DataGridViewComboBoxEditingControl 類別 (System.Windows.Forms) - Microsoft Docs

(另一種解決方式) Is there a DataGridView event when a combobox … [SOLVED] - DaniWeb