[C#] Jak usunac puste wiersze w DataGridView

0

Jak usunac puste wiersze z DataGridView, mecze sie z tym od dłuzszego czasu, napisałem jakis kodzik i nie działa mi dobrze, wyskakuje komunikat: "Nie mozna usunac nieprzekazanego wiersza" a kod mam taki:

foreach(DataGridViewRow dr in dataGridView1.Rows)
                {
                    if (dr.Cells[0].Value == null && dr.Cells[1].Value == null && dr.Cells[2].Value == null)
                        dataGridView1.Rows.RemoveAt(dr.Index);
                    
                }

Moj dataGridView1 składa sie z 3 kolum. Czemu ten kod nie usuwa pustych wierszy? Aha, nie chodzi mi o ten pusty wiersz który sie tworzy automatycznie tylko o wiersze ktore beda powstawały gdy user najpierw cos wpisze do komorek danego wiersza a pozniej to usunie.

0

dla jednokolumnowego zrobiłem w ten sposob i usuwa

            for (int i = 0; i < dataGridView1.RowCount-1; i++)
            {
                if (dataGridView1.Rows[i].Cells[0].Value == null)
                    dataGridView1.Rows.RemoveAt(i);
            }

robiąc tak jak Ty robiłeś, pojawiał się błąd, wyglądało jakby chciało usuwać ostatni wiersz ten co jest pusty zawsze

0

troche to dziwnie działa, bo zamist usunac wszystkie puste wiersze ten kod kasuje przewaznie po 2 puste wiersze przy kazdym jego odpaleniu

0

Myślałem ze chodzi i jeden.
Wrzuc to po prostu w petle while, cos takiego mniej więcej

            bool deleted = false;
            do
            {
                deleted = false;
                for (int i = 0; i < dataGridView1.RowCount - 1; i++)
                {
                    if (dataGridView1.Rows[i].Cells[0].Value == null)
                    {
                        dataGridView1.Rows.RemoveAt(i);
                        deleted = true;
                    }
                }
            }while (deleted == true);
0

Usuwanie elementów kolekcji przy użyciu pętli foreach to średni pomysł, bo ta pętla jest tylko do odczytu.

@dark_astray - po co dwie pętle?

Ja zacząłbym usuwanie po ludzku, czyli od końca, bo to nie powoduje zmiany indeksów kolejnych elementów ;]

0

(po to że for usuwał wiersz, indeksy sie zmieniały, i nie usuwało wszystkiego dlatego był while)

nie pomyślałem o usuwaniu od końca ^^ tak będzie lepiej.
Niech pan goodfather potestuje

0
dark_astray napisał(a)

(po to że for usuwał wiersz, indeksy sie zmieniały, i nie usuwało wszystkiego dlatego był while)

Gwoździe też wbijasz wiertarką? ;P

0
somekind napisał(a)
dark_astray napisał(a)

(po to że for usuwał wiersz, indeksy sie zmieniały, i nie usuwało wszystkiego dlatego był while)

Gwoździe też wbijasz wiertarką? ;P

na upartego, dało by się ;-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1