Проблема в логике btnDeleteVideo_Click
.
Представьте, что в вашем списке 5 элементов, пронумерованных от 0 до 4, и вы пытаетесь удалить 2 сразу.
Ваш код выше теперь перебирает все пять строк. Когда он добирается до первого удаления, он удаляет строку, удаляя ее из источника данных и повторно связывая.
Теперь он продолжается в цикле, пока не найдет второй элемент, помеченный для удаления, за исключением того, что теперь ваша сетка содержит на одну строку меньше, поскольку вы удалили и восстановились.
Таким образом, строка String sRecID = GridView2.DataKeys[gvr.RowIndex].Value.ToString();
будет иметь тенденцию взрываться, поскольку исходный индекс RowIndex теперь может превышать фактическое число строк.
Лучшим подходом было бы обработать все строки, которые вы хотите удалить, с помощью loopin, как вы, но только удалить и заново привязать в конце.