2012-01-08 16 views
6

Jak usunąć wszystkie wiersze datagridview oprócz nagłówków kolumn?Jak usunąć wszystkie wiersze DataGridView podczas ładowania formularza?

Próbowałem:

dataGridView1.Rows.clear(); 

ale to nie działa.

Próbowałem pętli nad rzędami i użyć metody RemoveAt, ale nie usuwa wszystkie wiersze:

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

Define "ale to nie działa", co się dzieje? –

+0

Możliwy duplikat [DataGridView.Clear()] (http://stackoverflow.com/questions/3744882/datagridview-clear) –

Odpowiedz

3

Jeśli siatka jest związany DataTable lub innego źródła danych, to musisz je wyczyścić nie jest siatką, w przeciwnym razie metoda Rows.clear() jest właściwym i najlepszym sposobem na zrobienie tego.

+0

dla (int i = 0; i user891757

+0

Masz swój datagridview związany z datatable, więc wyczyść datatable: tb.clear() – aleroot

7

Należy wyczyścić DataSource lub DataTable, a nie widok datagrid.

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

lub

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

drugie rozwiązanie jest dla mnie pracował, dzięki stary .. :-) – Praditha

13

Ten pracował dla mnie:

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

Dziwne, dlaczego za i dla każdej pętli nie działa i ten działa? Ale dobrze, że to działa! –

+0

Dziękuję od roku i kilka miesięcy później.Próbowałem użyć 'foreach' w kolekcji Rows na moim DGV, ale otrzymałem wyjątek, gdy próbowałem usunąć ten jeden" pusty "wiersz. Jeśli dodałem czek na wartości zerowe, to tylko kasowanie co drugiego wiersza? To działa. – sab669

3

W tym samym numerze Próbowałem kilka sposobów, ale nie może się udać. Jak wspomniano w jednej z odpowiedzi:

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

będzie faktycznie usunąć wiersz, ale następny wiersz zostanie przeniesiony do poprzedniego wiersza! Tak więc powyższe podejście usuwa połowę liczby wierszy! Dlatego musisz powtarzać akcję do zera!

Alternatywnie, próbowano usunąć z ostatniego wiersza do pierwszego. To działa!

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

używam

dataGridViewResult.Rows.Clear(); 

wyczyścić każdy wierszy bez usuwać kolumny.

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

Edytuj odpowiedź i wyjaśnij, jak to rozwiązuje problem. – Ben

1

// to powinno działać

int rowCount = dataGridView1.Rows.Count; 

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

rozwiązanie nie działał, ponieważ za każdym razem, gdy do kontroli pętli dla kondycji i < rowCount The rowCount byłby już zmniejszyła się o jedną wskutek dataGridView1.Rows.RemoveAt(i). W związku z tym usunięto by tylko połowę wierszy.

+0

Należy użyć 4 spacji przed każdą linią kodu, aby uzyskać blok kodu. Również "twoje rozwiązanie" nie jest jasne. –

1

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

+0

Powinien być podczas (dataGridView1.Rows.Count> 0) – Missy

Powiązane problemy