Самый простой способ - перехватить событие SelectionChanged
и проверить, выбрал ли пользователь все строки. Если это так, повторно выберите ранее выбранную строку. По сути, вы перехватываете их действие и переключаете выбор обратно. Примерно так (код не проверен, но вы поймете):
DataGridViewRow last_selected_row;
private void dgv_SelectionChanged(object sender, EventArgs e)
{
if (dgv.SelectedRows.Count == 0)
last_selected_row.Selected = true;
else
last_selected_row = dgv.SelectedRows[0];
}
В зависимости от вашего приложения, может быть лучше хранить индекс строки, а не ссылку на саму строку. Также обязательно инициализируйте last_selected_row и обновите его, если вы удалите какие-либо строки.
Любые другие элементы управления, перехватывающие событие SelectionChanged
, должны будут безопасно обрабатывать случай, когда строки не выбраны, в случае, если они срабатывают до события, которое переключает его обратно. Они могут просто немедленно вернуться, будучи уверенными в том, что SelectionChanged
мгновенно снова выстрелит.
Вы также можете создать подкласс DataGridView
и переопределить метод OnSelectionChanged
. Затем вы можете повторно выбрать последнюю выбранную строку до того, как произойдет событие (оно сработает при вызове base.OnSelectionChanged
).