DOBON.NET

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をご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価
良い / 悪い = 85 / 2

この記事へのコメント
通常のコメント [ 匿名 ] 2022年10月19日 03:04:01
ボタンに別の内容を入れたいときは、どうすればいいのでしょう?

評価の理由 [ なつみ ] 2017年4月28日 08:26:02
評価:良い
C#で分からないことがあればほとんどこのサイトにお世話になってるから。

評価の理由 [ しゃう ] 2016年4月7日 07:10:15
評価:良い
いつもありがとうございます。
知りたいことがピンポイントで的確なので本当に助かっています。
文章も解りやすいし言うことなしです。
これからもお世話になりっぱなしになるかと思います。ぜひ貴方のご負担にならない範囲で続けていただきたいです。

評価の理由 [ 匿名 ] 2016年2月4日 05:36:45
評価:良い
助かりました。

評価の理由 [ t ] 2012年5月11日 04:54:03
評価:良い
いつもここにお世話になってます


この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。