您可以使用的一个选项是自动完成。这可以模仿DataGridViewTextCell上的大多数所需行为,除了显示进入文本单元格的所有选项以外,并且不需要将单元格类型转换为ComboBox。
这可能在DataGridView EditingControlShowing事件进行处理:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is TextBox)
{
TextBox box = e.Control as TextBox;
box.AutoCompleteCustomSource = new AutoCompleteStringCollection();
box.AutoCompleteCustomSource.AddRange(new string[] { "Foo", "Bar", "Baz" });
box.AutoCompleteMode = AutoCompleteMode.Suggest;
box.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
}
考虑,用户必须对任何选项,以显示输入文字。如果所需的行为需要在输入文本框时显示所有选项,则这不是您的最佳选择。但是,如果这是所有其他所需行为(建议选项,接受非选项条目,并不总是必须显示等)的次要条件,则这是一个可行的解决方案。
编辑
这个工作在所有的下列情况:
- 的DataGridView是数据绑定。
绑定数据源:
public BindingList<Example> Examples { get; set; }
this.Examples = new BindingList<Example>();
dataGridView1.DataSource = this.Examples;
在哪里实施例是一个简单的类:
public class Example
{
public string First { get; set; }
public string Last { get; set; }
public string Test { get; set; }
}
- 手动添加柱(一个或多个)。
仅有空柱:
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.Name = "Extra";
col.HeaderText = "Extra";
this.dataGridView1.Columns.Add(col);
- 1和2都结合。
我不清楚你使用ComboBoxColumn类型的问题。你为什么不能使用它? – LarsTech 2015-02-05 17:40:50
我需要它是一个单元格选项。列中的某些项目不需要下拉(取决于该行上的其他值),而其他项目将向用户填充完全不同的选项列表。 – Tizz 2015-02-06 02:57:50