Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DatagridView组合框的自动完成_C#_Datagridview - Fatal编程技术网

C# DatagridView组合框的自动完成

C# DatagridView组合框的自动完成,c#,datagridview,C#,Datagridview,我有一个用于绑定值的数据网格视图 我在这个DatagridView中有一个组合框;我想在这个组合框中实现一个自动完成属性。它不仅要搜索第一个字母,还要搜索整个项目…这可以通过 抓取组合框 操作其项 假设您只有一个ComboBoxColumn;然后您可以抓取当前实例,如下所示: ComboBox editCombo = null; // class level variable private void dataGridView1_EditingControlShowing(objec

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

我在这个DatagridView中有一个组合框;我想在这个组合框中实现一个自动完成属性。它不仅要搜索第一个字母,还要搜索整个项目…

这可以通过

  • 抓取
    组合框
  • 操作其
假设您只有一个
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;
    }
}
假设您在
列表中有有效的值列表

请注意,此
x=>x.Contains(editCombo.Text)
搜索包含输入的全文的项目。我希望这就是你的意思;搜索与输入文本相同的项目毫无意义,因为这样您就不需要自动完成它们

List<string>() allChoices = new List<string>();
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
}