注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
DataGridViewの列にボタンを表示するには、DataGridViewButtonColumnを使用します。
ボタンに表示されるテキストは、そのセルに表示されるテキスト(つまり、FormattedValueプロパティで取得できる文字列)となります。ただし、DataGridViewButtonColumn.UseColumnTextForButtonValueプロパティをTrueにすると、DataGridViewButtonColumn.Textプロパティに設定したテキストが全てのボタンに表示されるようになります。
以下に、DataGridViewにボタンの列を追加する例を示します。全てのボタンのテキストを「詳細閲覧」としています。
'DataGridViewButtonColumnの作成 Dim column As New DataGridViewButtonColumn() '列の名前を設定 column.Name = "Button" '全てのボタンに"詳細閲覧"と表示する column.UseColumnTextForButtonValue = True column.Text = "詳細閲覧" 'DataGridViewに追加する DataGridView1.Columns.Add(column)
//DataGridViewButtonColumnの作成 DataGridViewButtonColumn column = new DataGridViewButtonColumn(); //列の名前を設定 column.Name = "Button"; //全てのボタンに"詳細閲覧"と表示する column.UseColumnTextForButtonValue = true; column.Text = "詳細閲覧"; //DataGridViewに追加する DataGridView1.Columns.Add(column);
DataGridViewButtonColumnのボタンをクリックすると、DataGridView.CellContentClickイベントが発生します。このイベントハンドラでクリックされたのが該当するボタン列であるかを調べ、そうであればボタンがクリックされた時の処理を行います。
ボタンがクリックされた時に、何行目のボタンがクリックされたかを表示する例を示します。
'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
//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メソッドをオーバーライドして、独自に描画するという方法になるようです。詳しくは、リンク先をご覧ください。