DataGridView 小ネタ集  2020年6月26日記

0.初めに


 Windows Forms プログラムを作成する場合、グリッド形式の一覧で表示する場合 DataGridView コントロールを使用します。今回は、その DataGridView に関連した小ネタを集めてみました。

DataGridView 小ネタ集

行を選択する方法

 プログラムコードから DataGridView の行を選択するには、つぎの方法があります。

  • セルを選択する方法
    DataGridView1[0, 0].Selected = true;
  • インデックスで行を選択する方法
    DataGridView1.Rows[1].Selected = true;

 選択直後に、「↑↓」キーで選択行を移動可能にするには、セルを指定する最初の方法を使用する必要があります。

Tab操作を変更する方法

 DataGridView で TAB キーを入力した場合の標準の動作は、現在アクティブなセルの次のセルに移動することです。この動作を、次のTab位置にあるコントロールに制御を移したい場合は、次のようにします。

  • DataGridView1.StandardTab = true;

行ヘッダーをなくす方法

 標準では、各行の左端に選択用のヘッダーが表示されます。これを表示させないようにするためには、次のようにします。

  • DataGridView1.RowHeadersVisible = true;

行単位の選択にする方法

 標準では、セル単位の選択となります。これを行単位の選択にするには、次のようにします。

  • DataGridView1.SelectionMode = FullRowSelect;

現在の表示サイズで表示可能な行数を知る方法

 現在の表示サイズで表示可能な行数を知るには、次のメソッドを使用します。

  • DisplayedRowCount(bool flag)
    引数の意味は、一部分でも表示可能な行も対象とする場合に true を、完全に表示可能な行だけを対象とする場合に false とします

選択行から、対応する DataRow を知る方法

 現在選択状態にある行から、対応するデータである DataRow にたどり着くには、次のようにします。

  • DataRow row = ((DataRowView) dataGridView1.SelectedRows[0].DataBoundItem).Row;

コラムを自動生成させない方法

 DataGridView に DataTable をバインドすると、DataTable のコラムから自動的に列が生成されてしまいます。この自動生成をさせないようにするには、Form の Load ハンドラで、次のようにします。

  • DataGridView1.AutoGenerateColumns = false;

選択色を通常のままにする方法

 DataGridView の選択色を通常のままにするには、以下の2つの処理を両方行います。

  • DataGridView の DefaultCellStyl eにある SelectionBackColor を Transparent にし、SelectionForeColor を ControlText に設定します
  • Form の Load ハンドラで、DataGridView1.CurrentCell = null; とします

checkBox の値を直ちに反映する方法

 DataGridView の項目に checkBox を追加した場合、checkBox の値を変更しても、そのコントロールから離れた時点でないと DataSource のモデルに値が反映されません。checkBox の値を変更すると直ちに反映するには、次のようにします。

					
      private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
      {
          if (dataGridlView1.CurrentCellAddress.X == 0 && dataGridlView1.IsCurrentCellDirty)
          {
              dataGridlView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
          }
      }
					
					

選択自体をさせない方法

 DataGridView で選択すると、セルの表示色が選択色に反抗されます。この選択そのものを禁止するには、セル選択のハンドラで選択状態をクリアすればよいです。

  • DataGridView1.Rows.Item(DataGridView1.CurrentCell.RowIndex).Selected = false;

ダブルクリックしたセルが、見出しであるかどうかを知る方法

 DataGridView のセルをダブルクリックした場合、そのセルが見出しであってもダブルクリックのハンドラが呼び出されます。見出しかどうかを知るためには、ダブルクリックのハンドラで次のようにします。

  • 引数のイベント e の RowIndex が負数であるかどうかで、見出しかどうかを判定できます