使用DataGridView
. 你需要做的是:
添加 DataGridViewButtonColumn 类型的列
DataGridViewButtonColumn
是标准DataGridView
列类型。它可以通过设计器添加,但我通常更喜欢使用代码(通常在表单构造函数中)。
DataGridViewButtonColumn col = new DataGridViewButtonColumn();
col.UseColumnTextForButtonValue = True;
col.Text = "ADD";
col.Name = "MyButton";
dataGridView1.Columns.Add(col);
设置UseColumnTextForButtonValue
为 true 意味着该Text
属性将应用于所有按钮,为它们提供“添加”按钮文本。您还可以使用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
}
}
编辑控件显示
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!
}
在您的情况下,编辑控件方法可能是最好的,因为它不会响应单击已替换为文本的按钮。此外,这种方式更像是您如何响应表单上的任何其他按钮。