2010-11-17 7 views

Respuesta

3

con referencia a Miguel respuesta
Creo que esto será fácil de implementar como esto

int currentRowIndex; 
    private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     currentRowIndex = e.RowIndex; 
    } 
    private void deleteToolStripMenuItem_Click(object sender, EventArgs e) 
    {  
     dataGridView1.Rows.Remove(dataGridView1.Rows[currentRowIndex]); 
    } 
6

Tendrá que crear un menú contextual con una opción "eliminar fila" en el diseñador. A continuación, asigne la propiedad ContextMenuStrip de DGV (Vista de cuadrícula de datos) a este menú contextual.

continuación, haga doble clic en el elemento de la fila de eliminación, y añadir este código:

DGV.Rows.Remove(DGV.CurrentRow); 

También tendrá que añadir un evento MouseUp para la DG V que permite que la celda actual para cambiar al hacer clic en él :

private void DGV_MouseUp(object sender, MouseEventArgs e) 
{ 
    // This gets information about the cell you clicked. 
    System.Windows.Forms.DataGridView.HitTestInfo ClickedInfo = DGV.HitTest(e.X, e.Y); 

    // This is so that the header row cannot be deleted 
    if (ClickedInfo.ColumnIndex >= 0 && ClickedInfo.RowIndex >= 0) 

    // This sets the current row 
    DataViewMain.CurrentCell = DGV.Rows[ClickedInfo.RowIndex].Cells[ClickedInfo.ColumnIndex]; 
} 
+0

+1 por * "A continuación, asigne la propiedad ** ContextMenuStrip de DGV (Vista de cuadrícula de datos) ** a este menú contextual." * –

3

Sé que esta pregunta es bastante antigua, pero tal vez alguien todavía tenga uso para esto. Hay un evento para esto, CellContextMenuStripNeeded. El siguiente código funciona perfectamente para mí y parece menos hacky que el MouseUp Solución:

private void DGV_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e) 
{ 
    if (e.RowIndex >= 0) 
    { 
     DGV.ClearSelection(); 
     DGV.Rows[e.RowIndex].Selected = true; 
     e.ContextMenuStrip = MENUSTRIP; 
    } 
} 
+0

Además, no es necesario comprobar 'if (e.RowIndex> = 0)' ya que el evento es desencadenado por una Celda que está para suew en una fila o en otra. Entonces 'e.RowIndex> = 0' siempre será verdadero. –

+0

Tenga en cuenta que este comportamiento es diferente de lo que sucede con el evento MouseDown y otros similares: en ese caso, el evento se desencadena también cuando el usuario opera con el mouse en la fila del encabezado y se proporciona 'e.Rowindex = -1'. –

+0

Esta debería ser la respuesta aceptada, esta es la forma prevista para lograr el resultado deseado. –

Cuestiones relacionadas