我有一个数据网格视图,用于绑定值。
我在这个DatagridView中有一个ComboBox;我想在这个ComboBox中实现一个自动完成属性。它不仅应该搜索第一个字母而是整个项目......
答案 0 :(得分:0)
这可以通过
完成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)
会搜索包含输入的全文的项目。我希望这就是你的意思;搜索与输入文本相同的项目毫无意义,因为无论如何您都不需要自动完成它们。