使用できるオプションの 1 つはオートコンプリートです。これにより、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 はデータ バインドされています。
DataSource のバインド:
public BindingList<Example> Examples { get; set; }
this.Examples = new BindingList<Example>();
dataGridView1.DataSource = this.Examples;
Example は単純なクラスです。
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を合わせたもの。