Używam VS 2008/C# i wiążę lokalną listę klas pomocniczych jako DataSource dla formantu DataGridView. Wywołanie metody Remove() na mojej liście klas pomocników powoduje wywołanie zdarzenia CellFormatting w DataGridView, co ma sens (nieco).Usuń ostatni wiersz Databound DataGridView C#
Podczas usuwania elementu DataBoundItem z ostatniego wiersza siatki (o ile kratka ma więcej niż jeden wiersz) kolekcja wierszy DataGridView nie jest aktualizowana przed wywołaniem tego zdarzenia. Tak więc w module obsługi zdarzeń CellFormatting otrzymuję IndexOutOfRangeException, ponieważ kolekcja Rows jest o jeden za duża.
Próbowałem już usunąć wiersz przy użyciu metody DataGridView.Rows.Remove() i powiązanie przy użyciu źródła BindingSource zamiast wiązania listy bezpośrednio jako źródło danych.
Znalazłem kilka odniesień do tego zdarzenia za pośrednictwem Google, ale odpowiedzi nie pojawiały się ani nie mówiły, że używają metody Delete() w kolekcji DataGridView lub DataGridView.Rows - żadna z nich nie istnieje.
Sortowanie również nie jest problemem, ponieważ wykonywanie/niewykonywanie sortowania prowadzi do tego samego wyniku.
Jedynym wyjątkiem od "ostatniego wiersza" będącego problemem do usunięcia jest sytuacja, w której DataGridView zawiera tylko jeden wiersz - w takim przypadku wszystko działa poprawnie.
Ustawienie na zero i powrót do pobranej pracy. – Pat
Zgłaszanie tego jako wyjątkowej odpowiedzi na szalone stare pytanie. :-) Wierzę, że próbowałem sugestii bez powodzenia w tym czasie. Wygląda jednak na to, że zadziałało dla innych. –