Как предложить добавить ComboBox в DataGridView?

у меня есть ComboBox на c# приложение Windows forms, где я установил AutoCompleteMode to SuggestAppend, и текст автоматически добавляется к входному (Рис. 1).

но если я поставил AutoCompleteMode to SuggestAppend на DataGridView ComboBox текст не добавляется (рис. 2).

как я могу включить SuggestAppend в datagridview комбобокс?

Рис. 1 :

AutoComplete ComboBox

Рис. 2 :

AutoComplete DataGridViewComboBoxCell

2 ответов


вы думаете, что вы бы сделать это так же, как нормальный ComboBox:

this.comboBox1.AutoCompleteCustomSource = new AutoCompleteStringCollection();
this.comboBox1.AutoCompleteCustomSource.AddRange(new string[] { "Good night", "Good evening", "Good", "All Good", "I'm Good" });
this.comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
this.comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

с ожидаемыми результатами:

AutoComplete ComboBox

как оказалось, можно! Но выбранный вариант не сохраняются после выхода ячейки. Я обнаружил, что вы должны изменить как вы добавляете раскрывающиеся параметры и как вы их источник:

public Form1()
{
  InitializeComponent();
  DataGridViewComboBoxColumn cc = new DataGridViewComboBoxColumn();
  cc.Name = "Combo";
  cc.Items.AddRange(new string[] { "Good night", "Good evening", "Good", "All Good", "I'm Good" });
  this.dataGridView1.Columns.Add(cc);
}

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
  ComboBox box = e.Control as ComboBox;
  if (box != null)
  {
    box.DropDownStyle = ComboBoxStyle.DropDown;
    box.AutoCompleteSource = AutoCompleteSource.ListItems;
    box.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
  }
}

Это обеспечит вам желаемые результаты:

AutoComplete DataGridViewComboBoxCell


вот краткий пример использования автозаполнения ComboBox в DataGridView в приложении Windows.

создайте одно приложение Windows и добавьте DataGridView из toolbox в design. Теперь создайте два DataGridViewComboBoxColumns и добавьте их в DataGridView:

public void ComboList1()
        {
            DataGridViewComboBoxColumn combo1 = new DataGridViewComboBoxColumn();
            combo1.HeaderText = "Country";
            combo1.Items.Add("Antarctica");
            combo1.Items.Add("Belgium");
            combo1.Items.Add("Canada");
            combo1.Items.Add("Finland");
            combo1.Items.Add("Albania");
            combo1.Items.Add("India");
            combo1.Items.Add("Barbados");
            dataGridView1.Columns.Add(combo1);
        } 
public void ComboList2()
        {
            DataGridViewComboBoxColumn combo2 = new DataGridViewComboBoxColumn();
            combo2.HeaderText = "Types of Jobs";
            combo2.Items.Add("Accounting");
            combo2.Items.Add("HR");
            combo2.Items.Add("Finance");
            combo2.Items.Add("Transportation");
            combo2.Items.Add("Testing");
            dataGridView1.Columns.Add(combo2);
        }

вызовите оба этих метода из конструктора формы.

теперь нажмите на DataGridView и сгенерируйте событие EditingControlShowing и напишите следующий код в это:

if (e.Control is DataGridViewComboBoxEditingControl)
            {
                ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown;
                ((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems;
                ((ComboBox)e.Control).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
            }

enter image description here

это будет работать для всех comboBoxes, которые присутствуют в DataGridView.

получил от этот пост.