![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| AlexV1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 27.1.2003 Репутация: нет Всего: нет |
В одной из колонок грида отображается целочисленное поле, зн-е которого 1,2 или 3
Требуется в гриде отобразить: 'один', если зн-е поля = 1 'два', если зн-е поля = 2 'три', если зн-е поля = 3 Если создавать объекты-поля, то у них есть событие OnGetText, где все это можно сделать без проблем. Хочу это сделать без использования объектов-полей компонента TTable. Я так думаю, нужно покрутить TDBGrid, но ничего не получается. |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Обрабатывай событие OnDrawColumnCell
-------------------- |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Вот линк, если не разберетесь, то спрашивайте, Вам всегда ответят.
http://forum.vingrad.ru/index.php?act=ST&f...ndrawcolumncell -------------------- |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
-------------------- |
|||
|
||||
| AlexV1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 27.1.2003 Репутация: нет Всего: нет |
Спасибо
|
|||
|
||||
| AlexV1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 27.1.2003 Репутация: нет Всего: нет |
Хотя вот здесь
Case (Field as TStringField).value of выдает ошибку: Ordinal type required Поле Field числовое целого типа |
|||
|
||||
| SmaLL |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 557 Регистрация: 17.12.2002 Где: Voronezh Репутация: 1 Всего: 2 |
Правильно пишет - свойство Value у TStringField типа String, а в CASE надо использовать числительное, Например не Value, а AsInteger. А также, мне кажется, что приведение к типу TStringField не требуется, т.к. у TField есть нужные свойства. Например можно написать так:
-------------------- Что ни делается - всЁ к лучшему! SmallWeb Мой адрес не дом и не улица, мой адрес родной пивзавод! |
||||
|
|||||
| AlexV1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 27.1.2003 Репутация: нет Всего: нет |
Заменил на
Case Field.AsInteger of Компилируется, запускается Но видимо в строке Field.Text := 'Два'; выдало ошибку 'Два' is not a valid integer value for field 'col_gr' |
|||
|
||||
| SmaLL |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 557 Регистрация: 17.12.2002 Где: Voronezh Репутация: 1 Всего: 2 |
Как я уже писал про DBComboBox попробуй ручками, вот так: в обработчике события OnAfterOpen компонента TTable
А в свой класс добавляешь метод: procedure GetTextHandler(Sender: TField; var Text: String; DisplayText: Boolean); -------------------- Что ни делается - всЁ к лучшему! SmallWeb Мой адрес не дом и не улица, мой адрес родной пивзавод! |
||||
|
|||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Да SmaLL, так можно сделать, но это не желательно в некоторых случаях, когда такие "преобразования" требуются осуществить только для отображения данных (т.е. только в TDBGrid), а сам набор данных, оставить без изменений. Для этого как раз то и существует "обработка" в TDBGrid. Причем именно этот способ, и является более близким к хорошему стилю программирования, чем тот, который предложен тобой. Хотя конечно все зависит от поставленной задачи.
Хочу извиниться перед AlexV1, так как я ему с самого начала дал не рабочий код. У меня не дошли руки его проверить. Я чуть попозже (сегодня) выложу нормальный рабочий код, просто сейчас со всеми версиями Delphi, что у меня установлены, происходит что-то странное, как разберусь, сразу же отвечу на этот вопрос. -------------------- |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Все, вот готовый код. Он рабочий, я проверял.
P.S. Да, еще, чуть не забыл, этот обработчик "вешается" на событие OnDrawColumnCell -------------------- |
|||
|
||||
| AlexV1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 27.1.2003 Репутация: нет Всего: нет |
Большое спасибо, Pegas!
Единственный нюанс: При перемещении курсора по сетке, если встать на поле, где изображено "Два", то вместо "Два", появится зн-е поля, т.е. 2 |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Этот ньюанс называется
-------------------- |
|||
|
||||
| AlexV1 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 27.1.2003 Репутация: нет Всего: нет |
Спасибо, Pegas, все получилось :-)
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |