Определение специального типа ячейки

если вы собираетесь рисовать самостоятельно

Первым шагом реализации приложения будет определение специального типа ячейки. Если вы собираетесь рисовать самостоятельно, можно переопределить защищенный виртуальный метод Paint Базового класса DataGridViewCell. Однако если содержимое ячейки, которое вы хотите отображать, является лишь вариацией одного из встроенных типов ячеек, то следует рассмотреть возможность наследования от одного из этих типов. Именно это я и сделал в данном случае. Поскольку мои специальные ячейки должны показывать изображения, естественным базовым классом для них будет DataGridViewlmageCell. Однако мой класс StatusCell Не будет предусматривать возможность установки произвольных изображений; он предназначен для работы с перечислимыми значениями. Я хочу также, чтобы ячейка могла оперировать целыми значениями, если они укладываются в диапазон соответствующих численных значений перечисления, чтобы можно было поддерживать обычную ситуацию, когда перечислимые типы сохраняются в базе данных как целые значения. Код листинга 6.4 показывает реализацию класса StatusCell. В этом коде сначала объявляется перечисление Statuslmage. Оно будет ожидаемым типом для свойства Value Данного типа ячейки. Далее вы видите, что тип StatusCell Является производным от DataGridViewImage — Cell, Поэтому я могу воспользоваться способностью последнего представлять изображения внутри сетки. Имеется поле состояния по умолчанию и соответствующее свойство, позволяющее непосредственно прочитать значение состояния по умолчанию. Конструктор, кроме того, устанавливает для свойства ImageLayout Базового класса значение Fill, Поэтому изображения масштабируются так, чтобы они вписывались в ячейку без искажения.

Ключевым моментом в специальном типе ячейки является либо переопределение метода Paint, О чем уже упоминалось, либо переопределение метода GetFormattedValue, Что и делается в классе StatusCell. Этот метод будет вызываться всякий раз при отображении ячейки, и позволяет вам обрабатывать преобразование значений других типов в тип, ожидаемый ячейкой. Я решил, что код метода GetFormattedValue В этом примере должен сначала установить для ячейки некоторое значение по умолчанию, на случай, если ничего другого сделано не будет. Затем код пытается получить действительное значение по умолчанию из свойства Defaultvalue Содержащего ячейку столбца, если это столбец типа StatusColumn . Код проверяет, что текущее свойство Value Является перечислимым типом Statuslmage Или целым, и если оно целое, приводит значение к перечислимому типу.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *