Hier gibt es zwei Möglichkeiten, eine hässliche und eine von MSDN.
Das hässliche: eine Schaltfläche, um Ihre DGV hinzufügen zur Laufzeit
Sie wie folgt:
- ein ungebundenes DataGridViewTextBoxColumn auf Ihre DGV hinzufügen. Beachten Sie den Indexwert in Ihrem DGV. Hier setzen Sie Ihren Knopf.
- Ihr DGV des Cellformatting-Ereignis verwenden wie so:
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;
}
}
}
Wenn ein Benutzer auf die Schaltfläche Ereignis des cellButton_Click klickt ausgelöst. Hier ist ein Testcode:
Wie Sie sehen können, ist dies nicht sehr raffiniert. Ich basierte auf einer noch hässlicheren Probe, die ich fand. Ich bin sicher, dass Sie es an Ihre Bedürfnisse anpassen können.
Von MSDN: Roll eigenen (erweitern) DataGridViewButtonColumn, die eine deaktivierte Schaltfläche bedingt anzeigt.
Für diese Option sehen How to: Disable Buttons in a Button Column in the Windows Forms DataGridView Control
Natürlich ist diese Option alle Tasten nicht wirklich entfernen, deaktiviert nur bedingt sie. Für Ihre Anwendung könnte dies jedoch besser sein.