DataGridViewButtonCell (Clase)
Actualización: noviembre 2007
Muestra una interfaz de usuario con apariencia de botón para su uso en un control DataGridView.
Ensamblado: System.Windows.Forms (en System.Windows.Forms.dll)
La clase DataGridViewButtonCell es un tipo especializado de DataGridViewCell que se utiliza para mostrar una interfaz de usuario con apariencia de botón.
El control DataGridViewButtonColumn es el tipo de columna especializó en contener celdas de este tipo. Para modelar las celdas dentro de una columna como un control DataGridViewButtonCell existente, establezca la propiedad CellTemplate de la columna en esa celda. De manera predeterminada, la propiedad CellTemplate se inicializa con una nueva DataGridViewButtonCell.
Para responder a los clics del mouse realizados por el usuario, controle el evento DataGridView.CellClick o DataGridView.CellContentClick. En el controlador de eventos, puede utilizar la propiedad DataGridViewCellEventArgs.ColumnIndex para determinar si el clic se produjo en la columna de botón. Puede utilizar la propiedad DataGridViewCellEventArgs.RowIndex para determinar si el clic se produjo en una celda del botón determinada.
Las propiedades de la columna relacionadas con celdas actúan como contenedores para las propiedades con nombres similares de la celda de plantilla. Al cambiar los valores de propiedad de la celda de plantilla sólo se verán afectadas las celdas que estén basadas en la plantilla y se hayan agregado después del cambio. Al cambiar los valores de propiedad relacionados con las celdas de la columna, sin embargo, se actualizará la celda de la plantilla y también todas las demás celdas de la columna, actualizando su presentación si es necesario.
Nota:
|
|---|
|
Cuando los estilos visuales están habilitados, los botones de una columna de botones se pintan usando ButtonRenderer y los estilos de celda especificados mediante propiedades como DefaultCellStyle no tienen ningún efecto. |
Notas para los herederos:
Cuando derive del control DataGridViewButtonCell y agregue nuevas propiedades a la clase derivada, asegúrese de reemplazar el método Clone para copiar las nuevas propiedades durante las operaciones de clonación. También debe llamar al método Clone de la clase base para que las propiedades de la clase base se copien en la nueva celda.
En el ejemplo de código siguiente se muestra cómo utilizar DataGridViewButtonColumn para realizar acciones en filas concretas. Puede utilizar código similar cuando trabaje con objetos DataGridViewButtonCell individuales. En este ejemplo, un controlador de eventos DataGridView.CellClick determina primero si se ha producido un clic en una celda del botón y, a continuación, recupera un objeto de negocios asociado a la fila. Este ejemplo forma parte de un ejemplo más extenso proporcionado en Cómo: Obtener acceso a objetos de una lista desplegable DataGridViewComboBoxCell en formularios Windows Forms.
public class Form1 : Form { private List<Employee> employees = new List<Employee>(); private List<Task> tasks = new List<Task>(); private Button reportButton = new Button(); private DataGridView dataGridView1 = new DataGridView(); [STAThread] public static void Main() { Application.Run(new Form1()); } public Form1() { dataGridView1.Dock = DockStyle.Fill; dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; reportButton.Text = "Generate Report"; reportButton.Dock = DockStyle.Top; reportButton.Click += new EventHandler(reportButton_Click); Controls.Add(dataGridView1); Controls.Add(reportButton); Load += new EventHandler(Form1_Load); Text = "DataGridViewComboBoxColumn Demo"; } // Initializes the data source and populates the DataGridView control. private void Form1_Load(object sender, EventArgs e) { PopulateLists(); dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = tasks; AddColumns(); } // Populates the employees and tasks lists. private void PopulateLists() { employees.Add(new Employee("Harry")); employees.Add(new Employee("Sally")); employees.Add(new Employee("Roy")); employees.Add(new Employee("Pris")); tasks.Add(new Task(1, employees[1])); tasks.Add(new Task(2)); tasks.Add(new Task(3, employees[2])); tasks.Add(new Task(4)); } // Configures columns for the DataGridView control. private void AddColumns() { DataGridViewTextBoxColumn idColumn = new DataGridViewTextBoxColumn(); idColumn.Name = "Task"; idColumn.DataPropertyName = "Id"; idColumn.ReadOnly = true; DataGridViewComboBoxColumn assignedToColumn = new DataGridViewComboBoxColumn(); // Populate the combo box drop-down list with Employee objects. foreach (Employee e in employees) assignedToColumn.Items.Add(e); // Add "unassigned" to the drop-down list and display it for // empty AssignedTo values or when the user presses CTRL+0. assignedToColumn.Items.Add("unassigned"); assignedToColumn.DefaultCellStyle.NullValue = "unassigned"; assignedToColumn.Name = "Assigned To"; assignedToColumn.DataPropertyName = "AssignedTo"; assignedToColumn.AutoComplete = true; assignedToColumn.DisplayMember = "Name"; assignedToColumn.ValueMember = "Self"; // Add a button column. DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn(); buttonColumn.HeaderText = ""; buttonColumn.Name = "Status Request"; buttonColumn.Text = "Request Status"; buttonColumn.UseColumnTextForButtonValue = true; dataGridView1.Columns.Add(idColumn); dataGridView1.Columns.Add(assignedToColumn); dataGridView1.Columns.Add(buttonColumn); // Add a CellClick handler to handle clicks in the button column. dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick); } // Reports on task assignments. private void reportButton_Click(object sender, EventArgs e) { StringBuilder report = new StringBuilder(); foreach (Task t in tasks) { String assignment = t.AssignedTo == null ? "unassigned" : "assigned to " + t.AssignedTo.Name; report.AppendFormat("Task {0} is {1}.", t.Id, assignment); report.Append(Environment.NewLine); } MessageBox.Show(report.ToString(), "Task Assignments"); } // Calls the Employee.RequestStatus method. void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { // Ignore clicks that are not on button cells. if (e.RowIndex < 0 || e.ColumnIndex != dataGridView1.Columns["Status Request"].Index) return; // Retrieve the task ID. Int32 taskID = (Int32)dataGridView1[0, e.RowIndex].Value; // Retrieve the Employee object from the "Assigned To" cell. Employee assignedTo = dataGridView1.Rows[e.RowIndex] .Cells["Assigned To"].Value as Employee; // Request status through the Employee object if present. if (assignedTo != null) { assignedTo.RequestStatus(taskID); } else { MessageBox.Show(String.Format( "Task {0} is unassigned.", taskID), "Status Request"); } } }
System.Windows.Forms.DataGridViewElement
System.Windows.Forms.DataGridViewCell
System.Windows.Forms.DataGridViewButtonCell
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Nota: