Я реализовал автозаполнение таким образом в моем DataGridView в нескольких столбцах моего текстового поля.
var source = new AutoCompleteStringCollection();
List<string> values = new List<string>();
for (int i = 0; i < dataGridRoadway.Rows.Count - 2; i++)
{
if (columnName == "Road Name")
{
values.Add(dataGridRoadway.Rows[i].Cells["Road Name"].Value.ToString());
}
}
source.AddRange(values.ToArray());
//Set the appropriate properties on the textbox control
TextBox dgvEditBox = e.Control as TextBox;
if (dgvEditBox != null)
{
dgvEditBox.AutoCompleteMode = AutoCompleteMode.Suggest;
dgvEditBox.AutoCompleteCustomSource = source;
dgvEditBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
Когда элемент из моего источника автозаполнения выбран с помощью мыши, текущая строка неправильно установлена на новую строку (выбор элемента из автозаполнения с помощью стрелок и табуляции не вызывает новую строку). Это, в свою очередь, запускает событие RowValidating и запускает мою логику проверки всей строки, прежде чем пользователь фактически закончит ввод данных из этой строки.
Я бы предположил, что DataGridView обнаруживает мой щелчок мыши по раскрывающемуся меню автозаполнения и связывает его с щелчком по новой строке. Конечно, это не то поведение, которое мне нужно. Это можно обойти? Есть ли способ обнаружить выбор автозаполнения и затем переопределить новую создаваемую строку?