準備

(なし)

デザイン

1. フォーム (Form1) にボタン (button1) を配置します。
2. フォーム (Form1) にデータグリッドビュー (dataGridView1) を配置します。

サンプルコード (C#)

// 名前空間の追加
// (なし)

// コード
private void Form1_Load(object sender, EventArgs e)
{
  dataGridView1.Columns.Add("", "都道府県");
  dataGridView1.Rows.Add(5);
  
  BindingSource bc = new BindingSource();
  bc.Add("新宿区");
  bc.Add("渋谷区");
  bc.Add("池袋");
  
  DataGridViewComboBoxColumn dgvCombo = new DataGridViewComboBoxColumn();
  dgvCombo.HeaderText = "市区町村";
  dgvCombo.DataSource = bc;
  
  dataGridView1.Columns.Add(dgvCombo);
}

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
  if (dataGridView1[e.ColumnIndex, e.RowIndex].GetType().Equals(typeof(DataGridViewComboBoxCell)))
  {
    dataGridView1.BeginEdit(false);
    ((DataGridViewComboBoxEditingControl)dataGridView1.EditingControl).DroppedDown = true;
  }
}

解説

データグリッドビューの列に設定したコンボボックスをコンボボックスをクリックすると、そのクリックはフォーカスを設定する意味となります。リストを展開するには、もう 1 回コンボボックスをクリックする必要があります。これでは使い勝手がよくありません。

そこで、他のセルにフォーカスがあっても、コンボボックスを 1 回クリックすると、フォーカスの設定とリストの展開を同時に行っています。ポイントはグリッドビューを編集状態にした上で、DataGridViewComboBoxEditingControl のプロパティを変更することです。

結果

動作確認環境

Visual Studio 2015 Professional (C# 6.0)