2011-08-01 105 views
5

Tengo una función para borrar registros individuales de click derecho eliminar en un DataGridView ..Eliminar varias filas en DataGridView

código:

private void dataGridView1_MouseDown(object sender, MouseEventArgs e) 
    { 

      if (e.Button == MouseButtons.Right) 
      { 
       var hti = dataGridView1.HitTest(e.X, e.Y); 
       if (hti.RowIndex != -1) 
       { 
        dataGridView1.ClearSelection(); 
        dataGridView1.Rows[hti.RowIndex].Selected = true; 
       } 
      }   
    } 

    private void DeleteRow_Click(object sender, EventArgs e) 
    { 
      Int32 rowToDelete = dataGridView1.Rows.GetFirstRow(DataGridViewElementStates.Selected); 
      if (rowToDelete != -1) 
      { 
       dataGridView1.Rows.RemoveAt(rowToDelete); 
       dataGridView1.ClearSelection(); 
      }   
    } 

pero ahora quiero eliminar varias filas de la selección.
Primero, no sé por qué no puedo seleccionar varias filas.
En segundo lugar, quiero eliminar varias eliminaciones usando el botón Eliminar y el botón derecho del mouse eliminar.

¿Alguien me puede ayudar?

Respuesta

10

Editar: Eche un vistazo a su código. Está configurando la fila seleccionada según los resultados del método HitTest. La propiedad DataGridViewSelectedRows determinará qué filas están seleccionadas. No estoy seguro de por qué necesita ejecutar un HitTest, pero de nuevo quizás no haya explicado completamente la funcionalidad deseada.

if (e.Button == MouseButtons.Right) 
{ 
    var hti = dataGridView1.HitTest(e.X, e.Y); 
    if (hti.RowIndex != -1) 
    { 
     dataGridView1.ClearSelection(); 
     dataGridView1.Rows[hti.RowIndex].Selected = true; 
    } 
} 

Asegúrese de que la propiedad se establece en MultiSelecttrue en su cuadrícula de datos.

A continuación, puede utilizar la propiedad SelectedRows en el evento de su elección:

foreach (DataGridViewRow row in DataGridView1.SelectedRows) 
{ 
    DataGridView1.Rows.Remove(row); 
} 
+0

la selección múltiple funciona ... pero al hacer clic con el botón derecho eliminar ... cuando selecciono varias filas y hago clic con el botón derecho, selecciono solo una fila ... ¿por qué ocurre esto? – user175084

+1

¿Ha marcado la propiedad 'SelectionMode' de la cuadrícula de datos? ¿Estás seguro de que estás seleccionando la fila completa y no solo una celda? –

+0

sí, estoy seleccionando la fila completa y no solo una celda ... ¿dónde está el modo de selección? gracias – user175084

3

por favor asegúrese de lo siguiente caso:

si es necesario para eliminar registros en la cuadrícula de datos, no lo hacen simplemente almacene el rowIndex en la cuadrícula de datos, (en su lugar debe guardar las claves correspondientes en DB):

por ejemplo: Quiero eliminar la fila 1 y 2 en la cuadrícula de datos, almacené su rowIndex en la cuadrícula de datos. después de eliminar la fila 1 en la cuadrícula de datos, los datos en la fila 2 CAMBIARÁN a la fila 1 y en la fila 3 CAMBIARÁN a la fila 2, porque está utilizando la cuadrícula de datos rowIndex para localizar qué datos eliminar, por lo tanto, resultado: data1 y data3 se eliminarán finalmente.