DatagridView ComboBox的自动完成功能

时间:2016-04-10 12:14:01

标签: c# datagridview

我有一个数据网格视图,用于绑定值。

我在这个DatagridView中有一个ComboBox;我想在这个ComboBox中实现一个自动完成属性。它不仅应该搜索第一个字母而是整个项目......

1 个答案:

答案 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)会搜索包含输入的全文的项目。我希望这就是你的意思;搜索与输入文本相同的项目毫无意义,因为无论如何您都不需要自动完成它们。