2012-01-08 23 views
6

¿Cómo puedo eliminar todas las filas de datagridview excepto los encabezados de columna?¿Cómo eliminar todas las filas de DataGridView en la carga de formulario?

me trataron:

dataGridView1.Rows.clear(); 

pero no funciona.

Me trataron de bucle sobre las filas y utilizar el método RemoveAt, pero no elimina todas las filas:

private void Form5_Load(object sender, EventArgs e) 
{  
    dataGridView1.AutoGenerateColumns = true; 
    SqlConnection con = new SqlConnection(@"Data Source=.\myserver;Initial Catalog=test;Integrated Security=True"); 
    adapter = new SqlDataAdapter("SELECT id as [#], description as [Description], unit as [Unit], amount as [Amount], unitPrice as [Unit Price], total as [Total] FROM tbl_poMaterials", con); 
    adapter.SelectCommand.CommandType = CommandType.Text; 
    DataTable tb = new DataTable(); 
    adapter.Fill(tb); 
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 
    dataGridView1.DataSource = tb; 

    dataGridView1.Columns[0].Width = 30; 
    dataGridView1.Columns[0].ReadOnly = true; 
    dataGridView1.Columns[1].Width = 660; 

    for (int i = 0; i < tb.Rows.Count; i++) 
    { 
     tb.Rows.RemoveAt(i); 
    } 
} 
+0

Definir "pero no funciona", ¿qué ocurre? –

+0

Posible duplicado de [DataGridView.Clear()] (http://stackoverflow.com/questions/3744882/datagridview-clear) –

Respuesta

3

Si su red se enlaza a un DataTable o alguna otra fuente de datos, entonces usted necesita para desactivarla , no la cuadrícula, de lo contrario, el método Rows.clear() es la mejor forma de hacerlo.

+0

para (int i = 0; i user891757

+0

Tiene su datagridview vinculada a una tabla de datos, por lo que borre la tabla de datos: tb.clear() – aleroot

7

Debe borrar DataSource o DataTable y no la vista de cuadro de datos.

dataGridView.DataSource = null; 
dataGridView.Refresh(); 

o

dataTable.Clear(); 
dataGridView.Refresh(); 
+0

la segunda solución se ha trabajado para mí, gracias amigo ... :-) – Praditha

13

Esto funcionó para mí:

do 
{ 
    foreach (DataGridViewRow row in dataGridViewError.Rows) 
    { 
     try 
     { 
     dataGridViewError.Rows.Remove(row); 
     } 
     catch (Exception) { } 
    } 
} while (dataGridViewError.Rows.Count > 1); 
+0

Extraño, ¿por qué y para cada bucles no funciona y este funciona? ¡Pero lo bueno es que funciona! –

+0

Gracias de a un año y unos meses más tarde.Intenté usar un 'foreach' en la colección de Filas en mi DGV pero recibía una excepción cuando intentaba eliminar esa fila en blanco. Si agregué un cheque para nulos, ¿solo borraba cada dos filas? Esto funciona, sin embargo. – sab669

3

Por el mismo problema He intentado varias maneras, pero no podía tener éxito. Como se ha dicho en una de las respuestas:

for(int i = 0; i < myDataGridView.Rows.Count; i++) 
{ 
    myDataGridView.Rows.RemoveAt(i) 
} 

en realidad eliminar la fila, pero la siguiente fila se desplaza a la fila anterior! ¡Entonces, el enfoque anterior elimina la mitad del número de filas! ¡Por lo tanto, necesitas repetir la acción hasta que se vuelva cero!

Como alternativa, intenté eliminar de la última fila a la primera. ¡Funciona!

for(int i = myDataGridView.Rows.Count - 1; i >= 0; i--) 
{ 
    myDataGridView.Rows.RemoveAt(i); 
} 
4

utilizo

dataGridViewResult.Rows.Clear(); 

para borrar cada filas sin columnas de borrado.

0
int rowCount = dtg.Rows.Count; 
     for (int i = rowCount - 1; i >= 0; i--) 
     { 
      DataGridViewRow dr = dtg.Rows[i]; 
      dtg.Rows.Remove(dr); 
     } 
+0

Por favor, edite su respuesta y explique cómo esto soluciona el problema. – Ben

1

// esto debería funcionar

int rowCount = dataGridView1.Rows.Count; 

for (int i = 0; i < rowCount; i++) 
{ 
    dataGridView1.Rows.RemoveAt(0); 
} 

Su solución no funcionaba porque, cada vez cuando la de los controles de bucle para la condición i < rowCount, la rowCount ya habría disminuido por uno como resultado de dataGridView1.Rows.RemoveAt(i). Por lo tanto, solo la mitad de las filas se habrían eliminado.

+0

Utilice 4 espacios en frente de cada línea de código para obtener un bloque de código. Además, "tu solución" no está clara. –

1

while(dataGridView1.Rows.Count >1) { dataGridView1.Rows.RemoveAt(0); }

+0

Debería ser while (dataGridView1.Rows.Count> 0) – Missy

Cuestiones relacionadas