Здесь есть две возможности, одна уродливая и одна из MSDN.
Уродливая: Добавить кнопку к вашему DGV во время выполнения
Выполните следующие действия:
- добавьте несвязанный DataGridViewTextBoxColumn к вашему DGV.Обратите внимание, что это значение индекса в вашем DGV;это то место, куда вы положите свою кнопку.
- Используйте событие CellFormatting вашего DGV, например, так:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (e.ColumnIndex == 0) { // Assumes column 0 has the data that determines if a button should be displayed.
if (e.Value.ToString() == "bob") { // Test if a button should be displayed on row.
// Create a Button and add it to our DGV.
Button cellButton = new Button();
// Do something to identify which row's button was clicked. Here I'm just storing the row index.
cellButton.Tag = e.RowIndex;
cellButton.Text = "Hello bob";
cellButton.Click += new EventHandler(cellButton_Click);
dataGridView1.Controls.Add(cellButton);
// Your ugly button column is shown here as having an index value of 3.
Rectangle cell = this.dataGridView1.GetCellDisplayRectangle(3, e.RowIndex, true);
cellButton.Location = cell.Location;
}
}
}
Когда пользователь нажимает кнопку, событие cellButton_Click будет срабатывать.Вот некоторый тестовый код:
void cellButton_Click(object sender, EventArgs e) {
Console.WriteLine("Hello from row: {0}", ((Button) sender).Tag);
}
Как видите, он не очень изыскан.Я основал это на еще более уродливом образце, который нашел.Я уверен, что вы можете изменить его в соответствии со своими потребностями.
Из MSDN: Свернуть свой собственный (расширить) DataGridViewButtonColumn, который условно отображает отключенную кнопку.
Для этогосм. Как: отключить кнопки в столбце кнопок в элементе управления Windows Forms DataGridView
Конечно, на самом деле эта опция не удаляет каких-либо кнопок, только условно отключает им.Однако для вашего приложения это может быть лучше.