Я нашел этот ответ на форуме Microsoft
"Чтобы перетащить несколько строк, установите для DataGridView.MultiSelect значение true, а в событии DataGridView.DragDrop удалите и вставьте все строки в коллекцию DataGridView.SelectedRows."
Эта запись в блоге также показывает, как реализовать перетаскивание в DataGridView
Но мне кажется, что вам придется наследовать от DataGridView и переопределять эти события мыши, так как изменение выбора всегда будет вызываться иначе.
- защищенная виртуальная пустота
OnCellMouseDown (DataGridViewCellMouseEventArgs
д);
- защищенная виртуальная пустота
OnCellMouseUp (DataGridViewCellMouseEventArgs
е);
Затем вы можете перехватить событие SelectionChanged в OnMouseDown и сделать выборку в OnMouseUp. Вам нужно будет удерживать точку местоположения вниз, чтобы вы могли выбрать правильный элемент, если он не был перетаскиваемым.
Вам также нужно будет поддерживать список выбранных строк в событии мыши вниз, и если оно превращается в событие перетаскивания, вы перетаскиваете все эти выбранные строки и выделяете их при наведении мыши вверх.
И не забудьте очистить список / копию выбранных строк при событии мыши вверх.