Я объясню, что сказал выше. (Не знаю, как комментировать, поэтому поставлю это в ответ)
Он прав, вы должны изменить
if (!rowsDisplayStatus[rowIndex])
В
if (!rowsDisplayStatus[i])
Причина этого заключается в следующем:
rowIndex увеличивается, даже если строки ранее были удалены из объекта Rows. Таким образом, в dr.Table.Rows может быть только одна или две строки, но они могут иметь индексы (индексы), например, 8 и 9 (потому что ранее строки с 1 по 7 были стерты или по другим причинам).
Таким образом, вы получите текущий rowIndex, проверив свойство bindingManager.Current.RowIndex.
Но ваш rowDisplayStatus - это простой массив (или ArrayList) с правильным количеством строк в соответствии с i. Таким образом, для индекса строки: 8 (первая строка) вы должны смотреть на rowDisplayStatus [0] (который является значением i), а для индекса строки: 9 (вторая строка) вы должны смотреть на rowDisplayStatus [1] ... и т.д.
HTH, Моше