Образец приложения SimpleSpread

приложение поддерживает даже выбор прямоугольной

Как вы можете видеть, приложение позволяет вводить в ячейки числа; затем можно выбрать ряд ячеек и нажать кнопку Sum на панели инструментов сверху, чтобы вычислить их сумму и поместить ее в ячейку непосредственно справа или снизу от выбранных. Как показывает рис. 6.10, приложение поддерживает даже выбор прямоугольной группы ячеек, при этом производится суммирование как по строкам, так и по столбцам. Логика приложения не может, конечно, обрабатывать все варианты выбора и содержания ячеек, но она дает хорошее представление о том, как организуются подобные вещи.

Чтобы написать код приложения, мне пришлось проделать кое-что сверх того, что обычно присутствует в стандартных применениях DataGridView. Как уже упоминалось, я хотел обеспечить поддержку модели выбора, характерной для электронных таблиц, где вы можете выбирать отдельные ячейки, но щелчок на заголовке строки или столбца выбирает соответственно всю строку или весь столбец. Для этого я установил SelectionMode Сетки равным RowHeaderSelect, Выключил сортировку для всех столбцов в процессе их создания и добавления к сетке и затем обработал событие ColumnHeaderMouseClick, Чтобы вручную выбирать все ячейки столбца при щелчке на его заголовке. Здесь я просто добавляю программно к сетке несколько столбцов и строк, устанавливаю в заголовках столбцов буквы алфавита и выключаю сортировку каждого столбца, устанавливая в свойстве sortMode значение NotSortable. Если бы вам нужно было поддерживать очень большие электронные таблицы, потребовалось бы, возможно, хранить в памяти разреженный массив и отображать ячейки только при необходимости, чтобы избежать расходов, связанных с хранением большого числа ячеек, их содержимого и выбора, если сетка будет заполнена скудно. Для получения номеров строк, показываемых в их заголовках, я обрабатываю событие RowAdded И в обработчике устанавливаю значение заголовочной ячейки: Еще один режим выбора, который вам, возможно, захочется поддерживать, состоит в реализации горячих ячеек, когда выбор ячеек изменяется просто при движении мыши по сетке, без щелчков кнопкой. Для этого необходимо обрабатывать события CellMouseEnter И CellMouseLeave, Соответственно выбирая и отменяя выбор ячейки под курсором мыши в обработчиках этих событий.