如何在DataGridView中建议添加ComboBox?

9
在C# Windows Forms应用程序中,我有一个ComboBox。我已将AutoCompleteMode设置为SuggestAppend,并且文本会自动附加到输入中(见图1)。
但是如果我在DataGridView ComboBox中将AutoCompleteMode设置为SuggestAppend,它不会附加文本(见图2)。
我该如何启用DataGridView Combobox中的SuggestAppend?
图1: AutoComplete ComboBox 图2: AutoComplete DataGridViewComboBoxCell

看一下这篇帖子。对我很有用。 - vaheeds
2个回答

8

您可能认为它与普通的 ComboBox 一样:

this.comboBox1.AutoCompleteCustomSource = new AutoCompleteStringCollection();
this.comboBox1.AutoCompleteCustomSource.AddRange(new string[] { "Good night", "Good evening", "Good", "All Good", "I'm Good" });
this.comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
this.comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

期望的结果如下:

自动完成组合框

事实证明,你是可以做到的!但是选定的选项在离开单元格后不会保留。我发现你必须更改添加下拉选项的方式以及它们的来源:

public Form1()
{
  InitializeComponent();
  DataGridViewComboBoxColumn cc = new DataGridViewComboBoxColumn();
  cc.Name = "Combo";
  cc.Items.AddRange(new string[] { "Good night", "Good evening", "Good", "All Good", "I'm Good" });
  this.dataGridView1.Columns.Add(cc);
}

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
  ComboBox box = e.Control as ComboBox;
  if (box != null)
  {
    box.DropDownStyle = ComboBoxStyle.DropDown;
    box.AutoCompleteSource = AutoCompleteSource.ListItems;
    box.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
  }
}

这将为您提供所需的结果:

AutoComplete DataGridViewComboBoxCell


谢谢@OhBeWise抽出时间来看代码,实际上我写了相同的代码,但是我只写了suggest而不是suggestAppend :) - Tharif
1
这解决了我在一个非常复杂的程序结构中的问题。我想分享我的解决方案,希望能帮助其他人。我有一个很长的Combobox列表,只想通过键入来添加建议,而不是使用固定的Combobox。在我的EditingControlShowing下面添加了你的代码的3行,它们是:box.DropDownStyle = ComboBoxStyle.DropDown; box.AutoCompleteSource = AutoCompleteSource.ListItems; box.AutoCompleteMode = AutoCompleteMode.SuggestAppend; - Alper

0
这是一个关于如何在Windows应用程序中使用自动完成的ComboBox在DataGridView中的快速示例。
创建一个Windows应用程序,并从工具箱中添加一个DataGridView到设计中。 现在创建两个DataGridViewComboBoxColumns并将它们添加到DataGridView中:
public void ComboList1()
        {
            DataGridViewComboBoxColumn combo1 = new DataGridViewComboBoxColumn();
            combo1.HeaderText = "Country";
            combo1.Items.Add("Antarctica");
            combo1.Items.Add("Belgium");
            combo1.Items.Add("Canada");
            combo1.Items.Add("Finland");
            combo1.Items.Add("Albania");
            combo1.Items.Add("India");
            combo1.Items.Add("Barbados");
            dataGridView1.Columns.Add(combo1);
        } 
public void ComboList2()
        {
            DataGridViewComboBoxColumn combo2 = new DataGridViewComboBoxColumn();
            combo2.HeaderText = "Types of Jobs";
            combo2.Items.Add("Accounting");
            combo2.Items.Add("HR");
            combo2.Items.Add("Finance");
            combo2.Items.Add("Transportation");
            combo2.Items.Add("Testing");
            dataGridView1.Columns.Add(combo2);
        }

从表单构造函数中调用这两个方法。

现在点击DataGridView并生成EditingControlShowing事件,并在其中编写以下代码:

if (e.Control is DataGridViewComboBoxEditingControl)
            {
                ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown;
                ((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems;
                ((ComboBox)e.Control).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
            }

enter image description here

这将适用于 DataGridView 中存在的所有 comboBoxes。

来自此帖子


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接