Esta documentación está archivada y no tiene mantenimiento.

DataGridViewCellContextMenuStripNeededEventArgs (Clase)

Proporciona datos para el evento CellContextMenuStripNeeded.

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

public class DataGridViewCellContextMenuStripNeededEventArgs : DataGridViewCellEventArgs
public class DataGridViewCellContextMenuStripNeededEventArgs extends DataGridViewCellEventArgs
public class DataGridViewCellContextMenuStripNeededEventArgs extends DataGridViewCellEventArgs
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.

Cuando controla el evento CellContextMenuStripNeeded, siempre que el usuario hace clic en una celda con el botón secundario del mouse, se muestra el menú contextual que especifique en el controlador. Esto es útil cuando se desea mostrar menús contextuales en función del estado actual o del valor de una celda.

El evento CellContextMenuStripNeeded también se produce siempre que se recupera el valor de la propiedad DataGridViewCell.ContextMenuStrip, bien mediante programación o bien cuando el usuario hace clic en una celda con el botón secundario del mouse.

Puede utilizar las propiedades ColumnIndex y RowIndex para determinar el estado o el valor de una celda y utilizar esta información para establecer la propiedad 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 disminuciones del 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 específicas en lugar de para celdas individuales estableciendo la propiedad ContextMenuStrip de la fila o controlando el evento RowContextMenuStripNeeded de control DataGridView. El ajuste de la propiedad ContextMenuStrip de la celda reemplaza el ajuste de la propiedad ContextMenuStrip de la fila y el evento CellContextMenuStripNeeded reemplaza tanto el evento RowContextMenuStripNeeded como el ajuste de la propiedad ContextMenuStrip de la fila. Sin embargo, para evitar que se reemplace un menú contextual de fila, puede especificar referencia null (Nothing en Visual Basic) para un menú contextual de celda.

Para obtener más información sobre la forma de controlar eventos, vea Utilizar eventos.

El ejemplo de código siguiente utiliza la clase DataGridViewCellContextMenuStripNeededEventArgs para establecer el menú contextual sin dejar de compartir la fila.

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();
}

System.Object
   System.EventArgs
     System.Windows.Forms.DataGridViewCellEventArgs
      System.Windows.Forms.DataGridViewCellContextMenuStripNeededEventArgs

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, 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: