2012-01-08 15 views
6

Come posso rimuovere tutte le righe del datagridview tranne le intestazioni delle colonne?Come rimuovere tutte le righe DataGridView sul caricamento del modulo?

ho provato:

dataGridView1.Rows.clear(); 

ma non funziona.

ho cercato di ciclo sulle righe e utilizzare il metodo RemoveAt, ma non rimuove tutte le righe:

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

Definire "ma non funziona", cosa succede? –

+0

Possibile duplicato di [DataGridView.Clear()] (http://stackoverflow.com/questions/3744882/datagridview-clear) –

risposta

3

Se la griglia è legato ad un DataTable o qualche altro DataSource allora avete bisogno di cancellarlo , non la griglia, altrimenti il ​​metodo Rows.clear() è il modo giusto e migliore per farlo.

+0

per (int i = 0; i user891757

+0

Hai la tua vista datagrid associata a un datatable, quindi cancella il datatable: tb.clear() – aleroot

7

È necessario deselezionare DataSource o DataTable e non la vista datagrid.

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

o

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

la seconda soluzione è funzionante per me, grazie amico .. :-) – Praditha

13

questo ha funzionato per me:

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

Strano, perché per e per ogni ciclo non funziona e questo funziona? Ma la cosa buona è che funziona! –

+0

Grazie da un anno e pochi mesi dopo.Ho provato a utilizzare un 'foreach' nella raccolta di righe sul mio DGV ma stavo ottenendo un'eccezione quando tentava di eliminare quella riga" vuota ". Se ho aggiunto un assegno per null, è stato solo l'eliminazione di ogni altra riga? Questo funziona, però. – sab669

3

Per lo stesso problema che ho provato diversi modi, ma non poteva avere successo. Come detto in una delle risposte:

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

effettivamente eliminare la riga, ma la riga successiva viene spostato a riga precedente! Quindi, l'approccio sopra cancella la metà del numero di righe! Quindi, è necessario ripetere l'azione fino a quando non diventa zero!

In alternativa, si è tentato di eliminare dall'ultima riga al primo. Funziona!

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

Io uso

dataGridViewResult.Rows.Clear(); 

per cancellare ogni file senza colonne di eliminazione.

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

Modifica la tua risposta e spiega come questo risolve il problema. – Ben

1

// questo dovrebbe funzionare

int rowCount = dataGridView1.Rows.Count; 

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

La soluzione non ha funzionato perché, ogni volta quando il ciclo per i controlli per la condizione i < rowCount, il rowCount sarebbe già diminuita di uno a causa di dataGridView1.Rows.RemoveAt(i). Quindi solo la metà delle righe sarebbe stata cancellata.

+0

Utilizzare 4 spazi davanti a ogni riga di codice per ottenere un blocco di codice. Anche "la tua soluzione" non è chiara. –

1

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

+0

Dovrebbe essere while (dataGridView1.Rows.Count> 0) – Missy

Problemi correlati