これは、実際には を使用して行うのは非常に簡単DataGridView
です。あなたがする必要があるのは:
タイプ DataGridViewButtonColumn の列を追加します
DataGridViewButtonColumn
スタンダードなDataGridView
カラムタイプです。デザイナーを介して追加することもできますが、私は通常、コードを使用することを好みます (通常はフォーム コンストラクターで)。
DataGridViewButtonColumn col = new DataGridViewButtonColumn();
col.UseColumnTextForButtonValue = True;
col.Text = "ADD";
col.Name = "MyButton";
dataGridView1.Columns.Add(col);
UseColumnTextForButtonValue
true に設定すると、Text
プロパティがすべてのボタンに適用され、「ADD」ボタン テキストが与えられます。を使用DataPropertyName
して、グリッドのデータソース内の列をポイントしてボタン テキストを提供することも、各セルの値を直接設定することもできます。
ボタンをテキストに変更
ボタン列を作成したら、特定のボタンをテキストに変換します。これを行うには、ボタン タイプのセルをテキスト タイプのセルに置き換えます。このように多くの場所で実行できますが、最も優れているのはDataBindingComplete
イベント ハンドラーです。このイベントは、グリッドがバインドされて表示の準備が整った後、描画される前に発生します。
以下では、インデックス 1 の行を取得するだけですが、各行のValue
プロパティを調べることもできます。
void dataGridView1_DataBindingComplete(object sender,
DataGridViewBindingCompleteEventArgs e)
{
dataGridView1.Rows[1].Cells["MyButton"] = new DataGridViewTextBoxCell();
}
ボタンのクリックに反応する
問題の最後の部分は、ボタンのクリックへの応答です。これは少しぎこちなく、CellClick
イベントまたはEditingControlShowing
グリッド全体のイベントを使用する必要があります。
セルクリック
private void DataGridView1_CellClick(object sender,
System.Windows.FormsDataGridViewCellEventArgs e)
{
if (DataGridView1.Columns[e.ColumnIndex].Name == "MyButton")
{
// button clicked - do some logic
}
}
EditingControlShowing
void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is Button)
{
Button btn = e.Control as Button;
btn.Click -= new EventHandler(btn_Click);
btn.Click += new EventHandler(btn_Click);
}
}
void btn_Click(object sender, EventArgs e)
{
int col = this.dataGridView1.CurrentCell.ColumnIndex;
int row = this.dataGridView1.CurrentCell.RowIndex;
// Rest of the logic goes here!
}
あなたの場合、テキストに置き換えられたボタンをクリックしても応答しないため、編集コントロールのアプローチがおそらく最適です。また、この方法は、フォーム上の他のボタンに応答する方法に似ています。