Это может быть сделано путем
- Схватив
ComboBox
- манипулируя
Items
Предположим, у вас есть только один ComboBoxColumn
; то вы можете получить экземпляр текущего, как это:
ComboBox editCombo = null; // class level variable
private void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
editCombo = e.Control as ComboBox;
if (editCombo != null)
{
// here we can set its style..
editCombo.DropDownStyle = ComboBoxStyle.DropDown;
editCombo.AutoCompleteMode = AutoCompleteMode.Suggest;
// sigh..:
editCombo.TextChanged -= editCombo_TextChanged;
editCombo.TextChanged += editCombo_TextChanged;
}
}
Давайте предположим, что у вас есть действительный список значений в List<string>
List<string>() allChoices = new List<string>();
Тогда мы можем адаптировать Items
быть показано в TextChanged
событие:
void editCombo_TextChanged(object sender, EventArgs e)
{
List<String> items = allChoices.Select(x=>x)
.Where(x=>x.Contains(editCombo.Text)).ToList();
if (items.Count > 0)
{
editCombo.Items.Clear();
editCombo.Items.AddRange(items.ToArray());
}
editCombo.Select(editCombo.Text.Length, 0); //clear the selection
}
Обратите внимание, что это x=>x.Contains(editCombo.Text)
поиск предметов, которые содержат введен полный текст. Надеюсь, это то, что вы имеете в виду; поиск предметов, которые являются идентичными, к введенному тексту не имеет смысла, так как тогда вам не нужно автозаполнять их в любом случае ..