单击“自动完成”下拉列表时在DataGridView中创建的新行

时间:2012-02-09 23:38:32

标签: c# .net winforms datagridview autocomplete

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

0 个答案:

没有答案