CSharp – DataGridView + Select A Row + ContextMenuStrip
Written by lopezatienza on 08/06/2009 – 12:43 -Aqui os dejo un ejemplo de cómo seleccionar una fila de un control DataGridView pulsando el botón derecho para que aparezca el ContextMenu.
Si de normal pulsaramos con el botón derecho encima de la fila que deseemos y seleccionamos del ContextMenu cualquier opción, en la siguiente función saltaría una excepción ya que intentamos acceder a la propiedad "dgPrueba.SelectedRows[0].Index", puesto que con el botón derecho NO se selecciona la Row.
En este ejemplo tenemos en nuestro formulario un DataGridView llamado dgPrueba y un ContextMenu llamado menuPRUEBA.
De un primer momento tendremos asociados el dgPrueba con el ContextMenu, que sería lo más normal, en la Solución veremos cómo no se precisa.
private void Funcion1ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
if (dgPrueba.SelectedRows[0].Index > -1)
{
// Introducir aquí el código que deseemos
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Solución: Para solventar este error primeramente quitaremos la asociación del DataGridView con el ContextMenu, ya que lo llamaremos en el evento siguiente.
Añadiremos el siguiente código al evento CellMouseClick de nuestro DataGridView.
private void dgPrueba_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0 && e.Button == MouseButtons.Right)
{
dgPrueba.Rows[e.RowIndex].Selected = true;
Rectangle r = dgPrueba.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
menuPRUEBA.Show((Control)sender, r.Left + e.X, r.Top + e.Y);
}
}
Mediante este código asignaremos la propiedad Selected de la fila seleccionada a True, marcaremos la fila como si se hubiese seleccionado y llamamos al ContextMenu.
Una vez se pulse en la opción que deseemos, no nos saltará la excepción de que no hay ninguna fila seleccionada.
Espero os sirva de ayuda.
Un saludo.
Tags: C#, CSharp
Posted in CSharp | No Comments »