我在我的几个文本框列的DataGridView中实现了这样的AutoComplete。
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会在AutoComplete下拉列表中检测到我的鼠标点击,并将其与点击新行相关联。当然,这不是我需要的行为。有没有解决的办法?有没有办法检测自动完成选择,然后覆盖正在创建的新行?