[c#] Usuwanie powtarzających się wierszy w datagridview


(Czajo) #1

Witam. Dziś mam taki problem, że nie do końca działa mi usuwanie wierszy z dataGridView.

kod:

for (int i = 0; i < dataGridView2.Rows.Count - 1; i++)

            {

                licz_pow = 0;

                wyrazenie = dataGridView2[0, i].Value.ToString();

                for (int j = 1; j < dataGridView2.Rows.Count - 1; j++)

                {

                    wyrazenie2 = dataGridView2[0, j].Value.ToString();

                    if (wyrazenie == wyrazenie2)

                    {

                        licz_pow++;

                        if (licz_pow >= 1)

                            dataGridView2.Rows.Remove(dataGridView2.Rows[j]);

                    }

                    licz_pow = 0;

                }

                wyrazenie = "";

                wyrazenie2 = "";

            }

Nie mam już pomysłu jak to można zrobić, żeby usuwać powtarzające się wiersze na podstawie wartości z danej komórki. Jakieś pomysły?


(Grzelix) #2

Problem jest tu taki, że operujesz na kolekcji którą modyfikujesz.

Krótki przykład: załóżmy, że 2, 3 i 4 wiersz są takie same względem twojego kryterium.

Zmienna j wskazuje na 3 wiersz i warunek wymuszający usunięcie wiersza jest spełniony.

Po usunięciu wiersza trzeciego wiersz czwarty staje się wierszem trzecim, ale zmienna j jest inkrementowana dla kolejnej iteracji i stary wiersz 4 jest pominięty.

Możliwe rozwiązania:

  1. Zmniejszenie zmiennej j w momencie spełnienia warunku,

  2. Operowanie na kolekcji od ostatniego elementu. Usunięcie wiersza nie wpłynie na wiersze o niższym indeksie jeszcze nie sprawdzane.

  3. Stworzenie tymczasowej kolekcji do przekopiowania danych - jedna kolekcja read only.


(Czajo) #3

a którą metodę wykorzystać, by jak najmniej zmieniać w kodzie?

93158851966890355914.png

Jak usunąć powtarzające się linie w DataGridView (prawym)? Chcę, żeby została jedna wartość bez powtórzeń. Pomóżcie, bo już próbowałem na różne sposoby i nic mi nie wychodzi


(somekind) #4

Przy czym jedynie drugie rozwiązanie jest porządne, bo reszta to takie zaciemniające kod obchodzenie problemu, który się samemu stworzyło.


(mr-owl) #5

Witam,

Może się zastanów dlaczego one tam się znalazły... niezłym pomysłem jest usuwanie niepotrzebnych danych przed wysłaniem ich do kontrolki tak by odseparować prezentację od logiki biznesowej

Pozdrawiam,

mr-owl


(StawikPiast) #6

Ja też bym najpierw zapytanie przejrzał czemu zwraca dane podwójnie i tam się tego pozbył a nie w gridzie.