¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
Exportar (0) Imprimir
Expandir todo
Expandir Minimizar

DataGridView.CellContextMenuStripNeeded (Evento)

Se produce cuando se necesita el menú contextual de una celda.

Espacio de nombres: System.Windows.Forms
Ensamblado: System.Windows.Forms (en system.windows.forms.dll)

public event DataGridViewCellContextMenuStripNeededEventHandler CellContextMenuStripNeeded
/** @event */
public void add_CellContextMenuStripNeeded (DataGridViewCellContextMenuStripNeededEventHandler value)

/** @event */
public void remove_CellContextMenuStripNeeded (DataGridViewCellContextMenuStripNeededEventHandler value)

En JScript, se pueden controlar los eventos que define una clase, pero no se pueden definir unos propios.
No aplicable.

El evento CellContextMenuStripNeeded sólo se produce cuando se establece la propiedad DataSource del control DataGridView o cuando su propiedad VirtualMode es true.

Al controlar el evento CellContextMenuStripNeeded, el menú contextual especificado en el controlador se muestra siempre que el usuario hace clic con el botón secundario en una celda. Esto es útil cuando se desea mostrar un menú contextual determinado por el estado o el valor actual de una celda.

El evento CellContextMenuStripNeeded también se producirá siempre que se recupere el valor de la propiedad DataGridViewCell.ContextMenuStrip mediante programación o cuando el usuario haga clic con el botón secundario en una celda.

Puede utilizar las propiedades DataGridViewCellEventArgs.ColumnIndex y RowIndex para determinar el estado o el valor de una celda, y utilizar esta información para cambiar o modificar la propiedad DataGridViewCellContextMenuStripNeededEventArgs.ContextMenuStrip. Esta propiedad se inicializa con el valor de la propiedad ContextMenuStrip de la celda, que es reemplazado por el valor del evento.

Controle el evento CellContextMenuStripNeeded cuando trabaje con grandes volúmenes de datos con el fin de evitar penalizaciones en el rendimiento al establecer el valor de la propiedad ContextMenuStrip para varias celdas. Para obtener más información, vea Procedimientos recomendados para ajustar la escala del control DataGridView en formularios Windows Forms.

También puede especificar los menús contextuales para filas individuales en lugar de celdas individuales estableciendo la propiedad ContextMenuStrip de la fila o controlando el evento RowContextMenuStripNeeded. El valor de la propiedad ContextMenuStrip de la celda reemplaza el valor de la propiedad ContextMenuStrip de la fila y el evento CellContextMenuStripNeeded reemplaza los valores del evento RowContextMenuStripNeeded y la fila ContextMenuStrip. Sin embargo, puede especificar referencia null (Nothing en Visual Basic) para un menú contextual de celda con el fin de evitar que se reemplace un menú contextual de fila.

Para obtener más información sobre el control de eventos, vea Utilizar eventos.

En el ejemplo de código siguiente se muestra cómo utilizar un controlador de eventos CellContextMenuStripNeeded para mostrar un menú contextual personalizado que se utiliza cuando el usuario hace clic con el botón secundario en una celda.

private ToolStripMenuItem wholeTable = new ToolStripMenuItem();
private ToolStripMenuItem lookUp = new ToolStripMenuItem();
private ContextMenuStrip strip;
private string cellErrorText;

private void dataGridView1_CellContextMenuStripNeeded(object sender,
    DataGridViewCellContextMenuStripNeededEventArgs e)
{
    cellErrorText = String.Empty;

    if (strip == null)
    {
        strip = new ContextMenuStrip();
        lookUp.Text = "Look Up";
        wholeTable.Text = "See Whole Table";
        strip.Items.Add(lookUp);
        strip.Items.Add(wholeTable);
    }
    e.ContextMenuStrip = strip;
}

private void wholeTable_Click(object sender, EventArgs e)
{
    dataGridView1.DataSource = Populate("Select * from employees", true);
}

private DataGridViewCellEventArgs theCellImHoveringOver;

private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
    theCellImHoveringOver = e;
}

private DataGridViewCellEventArgs cellErrorLocation;

private void lookUp_Click(object sender, EventArgs e)
{
    try
    {
        dataGridView1.DataSource = Populate("Select * from employees where " +
            dataGridView1.Columns[theCellImHoveringOver.ColumnIndex].Name + " = '" +
            dataGridView1.Rows[theCellImHoveringOver.RowIndex].
            Cells[theCellImHoveringOver.ColumnIndex].Value + "'",
            true);
    }
    catch (SqlException)
    {
        cellErrorText = "Can't look this cell up";
        cellErrorLocation = theCellImHoveringOver;
    }
}

private void dataGridView1_CellErrorTextNeeded(object sender,
    DataGridViewCellErrorTextNeededEventArgs e)
{
    if (cellErrorLocation != null)
    {
        if (e.ColumnIndex == cellErrorLocation.ColumnIndex &&
            e.RowIndex == cellErrorLocation.RowIndex)
        {
            e.ErrorText = cellErrorText;
        }
    }
}

private DataTable Populate(string query, bool resetUnsharedCounter)
{
    if (resetUnsharedCounter)
    {
        ResetCounter();
    }

    // Alter the data source as necessary
    SqlDataAdapter adapter = new SqlDataAdapter(query,
        new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;" +
        "Initial Catalog=Northwind;Data Source=localhost"));

    DataTable table = new DataTable();
    table.Locale = System.Globalization.CultureInfo.InvariantCulture;
    adapter.Fill(table);
    return table;
}

private Label count = new Label();
private int unsharedRowCounter;

private void ResetCounter()
{
    unsharedRowCounter = 0;
    count.Text = unsharedRowCounter.ToString();
}

Windows 98, Windows 2000 Service Pack 4, Windows Millennium, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0
Mostrar:
© 2015 Microsoft