DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewの列にボタンを表示する

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

DataGridViewの列にボタンを表示するには、DataGridViewButtonColumnを使用します。

DataGridViewButtonColumn

ボタンに表示されるテキストは、そのセルに表示されるテキスト(つまり、FormattedValueプロパティで取得できる文字列)となります。ただし、DataGridViewButtonColumn.UseColumnTextForButtonValueプロパティをTrueにすると、DataGridViewButtonColumn.Textプロパティに設定したテキストが全てのボタンに表示されるようになります。

以下に、DataGridViewにボタンの列を追加する例を示します。全てのボタンのテキストを「詳細閲覧」としています。

VB.NET
コードを隠すコードを選択
'DataGridViewButtonColumnの作成
Dim column As New DataGridViewButtonColumn()
'列の名前を設定
column.Name = "Button"
'全てのボタンに"詳細閲覧"と表示する
column.UseColumnTextForButtonValue = True
column.Text = "詳細閲覧"
'DataGridViewに追加する
DataGridView1.Columns.Add(column)
C#
コードを隠すコードを選択
//DataGridViewButtonColumnの作成
DataGridViewButtonColumn column = new DataGridViewButtonColumn();
//列の名前を設定
column.Name = "Button";
//全てのボタンに"詳細閲覧"と表示する
column.UseColumnTextForButtonValue = true;
column.Text = "詳細閲覧";
//DataGridViewに追加する
DataGridView1.Columns.Add(column);

ボタンがクリックされたことを知る

DataGridViewButtonColumnのボタンをクリックすると、DataGridView.CellContentClickイベントが発生します。このイベントハンドラでクリックされたのが該当するボタン列であるかを調べ、そうであればボタンがクリックされた時の処理を行います。

ボタンがクリックされた時に、何行目のボタンがクリックされたかを表示する例を示します。

VB.NET
コードを隠すコードを選択
'CellContentClickイベントハンドラ
Private Sub DataGridView1_CellContentClick(ByVal sender As Object, _
        ByVal e As DataGridViewCellEventArgs) _
        Handles DataGridView1.CellContentClick
    Dim dgv As DataGridView = CType(sender, DataGridView)
    '"Button"列ならば、ボタンがクリックされた
    If dgv.Columns(e.ColumnIndex).Name = "Button" Then
        MessageBox.Show((e.RowIndex.ToString() + _
            "行のボタンがクリックされました。"))
    End If
End Sub
C#
コードを隠すコードを選択
//CellContentClickイベントハンドラ
private void DataGridView1_CellContentClick(object sender,
    DataGridViewCellEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    //"Button"列ならば、ボタンがクリックされた
    if (dgv.Columns[e.ColumnIndex].Name == "Button")
    {
        MessageBox.Show(e.RowIndex.ToString() +
            "行のボタンがクリックされました。");
    }
}

ボタンを無効状態にする

DataGridViewButtonColumnのボタンを無効状態(ButtonコントロールのEnabledプロパティをFalseにした時の状態)にすることは、基本的にはできません。これを可能にする方法は、「方法 : Windows フォーム DataGridView コントロールのボタン列にあるボタンを無効にする」で説明されています。これによると、DataGridViewDisableButtonCellのPaintメソッドをオーバーライドして、独自に描画するという方法になるようです。詳しくは、リンク先をご覧ください。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。