Страница 17

Все о DataGridView. Учебник

Главная
Страница 1
Страница 2
Страница 3
Страница 4
Страница 5
Страница 6
Страница 7
Страница 8
Страница 9
Страница 10
Страница 11
Страница 12
Страница 13
Страница 14
Страница 15
Страница 16
Страница 17
Страница 18
Страница 19
Страница 20
Страница 21
Страница 22
Страница 23
Страница 24
Страница 25
Страница 26






Скачать учебник
Предыдущая страница
Следующая страница
данных из большой таблицы БД.

Как работает DataGridViewCell

Для понимания структуры DataGridView важно разобраться, как устроена работа с ячейками.

Значения ячеек

Главное в ячейках – их значения. В свободных колонках (если grid не находится в виртуальном режиме) значения хранятся в экземплярах ячеек. В случае ячеек, связанных с источником данных, ячейки вообще ничего не знают о значениях и не хранят их. Если требуется значение ячейки, grid обращается к источнику данных за значением. В виртуальном режиме, как уже говорилось, для получения значения ячейки используется событие CellValueNeeded. На уровне ячейки все это контролируется с помощью метода DataGridViewCell.GetValue().

За тип данных, хранящихся в ячейке (то есть в ее свойстве Value), отвечает свойство ValueType, указывающее ячейке, данные какого типа она должна хранить. По умолчанию считается, что в свойстве Value ячейки хранится объект неопределенного типа (ValueType равно object). Если изменить это значение на значение конкретного типа, ячейка начнет контролировать значение, конвертируя его в/из типа, указанного в свойстве ValueType.

При связывании колонки с источником данных ее свойство ValueType получает значение (соответствующее значению типа данных колонки/свойства источника данных), что приводит к изменению значения ValueType ячеек.

Форматирование для отображения

Для отрисовки ячейки grid должен получить значение ее свойства FormattedValue. Свойства FormattedValueType колонок и ячеек определяют тип, используемый для экранного отображения. В большинстве случаев используется тип string, но, например, в ячейках типа DataGridViewCheckBoxCell или DataGridViewImageCell используются другие типы. В DataGridViewImageCell как значение FormattedValueType по умолчанию используется тип Image. А в DataGridViewCheckBoxCell значение FormattedValueType по умолчанию равно ThreeState. На уровне ячейки все это контролируется с помощью метода DataGridViewCell.GetFormattedValue().

Важно понимать, что потенциально ячейки могут хранить значения любых типов данных. Имеет значение лишь возможность конвертирования этих типов данных в тип, указанный в FormattedValueType. По умолчанию DataGridView для этого преобразованию использует TypeConverter-ы. Выбор нужного TypeConverter основывается на значениях свойств ValueType и FormattedValueType. Например, если имеется собственный класс Person и нужно отображать имя и фамилию, разделяя их запятой, то придется создать TypeConverter, преобразующий значение типа Person в string и обратно. Этот TypeConverter нужно ассоциировать с типом Person посредством атрибута TypeConverter. Если требуется только отображать данные, достаточно переопределить у класса Person метод ToString.

В случае ячейки FormattedValue запрашивается много раз. При каждой отрисовке ячейки или автоматическом изменении размеров колонки по содержимому ячейки, и даже при определении, находится ли курсор мыши над данной ячейкой. При каждом запросе FormattedValue DataGridView генерирует событие CellFormatting. Это дает возможность изменять форматирование ячейки.

Если ячейка не может получить значение FormattedValue, генерируется событие DataError.

Частью форматирования ячейки является определение ее правильных размеров. Размер складывается из комбинации FormattedValue ячейки, отступов и заполнителей, а также окантовки ячейки.

Отрисовка

За отрисовку ячейки отвечает сама ячейка. Кроме значения, получаемого через FormattedValue, при отрисовке используются стили, от которых зависят такие параметры, как выравнивание, перенос строк и т.п. Сама отрисовка

Предыдущая страница
Следующая страница
Хостинг от uCoz