Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OnGetText 
:(
    Опции темы
Akella
Дата 18.1.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



В таблице есть поле
Код

CREATE TABLE APART (
    ID                     "INT" NOT NULL /* "INT" = INTEGER */,
    ...
    IS_PHONE               BOOL /* BOOL = VARCHAR(1) DEFAULT 'F' */,
...


т.е. в поле записывается или F, или T

в коде пытаюсь сделать такое:

Код

procedure TDM.fibdsApartSearchIS_PHONEGetText(Sender: TField; var Text: string;
  DisplayText: Boolean);
begin
  if text = 'T' then
  text := '+';

  if text = 'F' then
  text := '-';
end;


т.е. хочу, что пользователь видел не 'T' или 'F', а '+' или '-', ну или Да-Нет, не важно

в поле есть значения и 'T' и 'F', но в сетке все ячейки этого поля пустые

хотя другое поле, где записывается 0 или 1 - все нормально, т.е. в сетку выводится 'Да' или 'Нет'.
PM MAIL   Вверх
neat
Дата 19.1.2006, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Используйте OnSetText.
Код

rocedure TDM.fibdsApartSearchIS_PHONESetText(Sender: TField; const Text: String);
begin
    if text = 'T' then
       fibdsApartSearchIS_PHONE.AsString := '+';

   if text = 'F' then
      fibdsApartSearchIS_PHONE.AsString := '-';
end;

PM MAIL   Вверх
Akella
Дата 19.1.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



neat, на сколько я знаю, то OnSetText используется при записи в таблицу, а мне нужно при чтении из таблицы
PM MAIL   Вверх
neat
Дата 19.1.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Тогда так
Код

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    if Column.FieldName = 'название_колонки' then
    with DBGrid1.Canvas do begin
      if fibdsApartSearchIS_PHONE.Value = 'F' then begin
        Brush.Color := clWhite;
        FillRect(Rect);
        TextOut(Rect.Left + 2, Rect.Top + 2, '-');
      end;
      if fibdsApartSearchIS_PHONE.Value = 'T' then begin
        Brush.Color := clWhite;
        FillRect(Rect);
        TextOut(Rect.Left + 2, Rect.Top + 2, '+');
      end;
    end;
end;

PM MAIL   Вверх
Akella
Дата 19.1.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



нет, так не пойдет, т.к. к таблице подключено несколько сеток (такая специфика) и в каждой сетке прописывать это событие?
PM MAIL   Вверх
SergeBS
Дата 19.1.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Akella
Цитата

нет, так не пойдет, т.к. к таблице подключено несколько сеток (такая специфика) и в каждой сетке прописывать это событие?

Тогда делай вычисляемое поле. А с T/F прячь. Все равно, если редактировать надо, то будешь иметь некоторые стандартные проблемы.
И вообще на эту тему есть статья Разноцветный DBGrid на DelphiKingdom. Ничего отличного от того, что там есть, не придумаете.
Заодно узнаешь, как обойтись одним обработчиком на все сетки. А прописывать обработку все равно придется. Или делай компонент/фрейм с уже прописанной обработкой.

neat
2-й if нафиг не нужен. Вся строка с ним заменяется на else begin ...


PM MAIL   Вверх
Akella
Дата 19.1.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



про сетку я знаю, мне нужно именно OnGetTex
блин, но в соседнем же поле нормально отрабатывается
Добавлено @ 11:58
вопрос открыт
PM MAIL   Вверх
neat
Дата 19.1.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Вот похоже то, что тебе требуется
Код

procedure TDM.fibdsApartSearchIS_PHONEGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
if DisplayText then begin
  if Sender.Value = 'F' then
   text := '-' 
  else
    text := '+';
end else
  text := Sender.AsString;
end;

PM MAIL   Вверх
Alex
Дата 19.1.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Как я узнал замену нужно сделать при отображении данных в DBGridEh, а там это делается в течении 10 секунд. У каждой колонки есть свойства: KeyList и PickList. Соответственно в KeyList добавляем две строки:
Цитата

F
T

В PickList тоже две строки:
Цитата

-
+

Теперь при редактировании данных из грида в базу будут записывать F/T, а отображать -/+


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Akella
Дата 19.1.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



да, так работает, но хочу через OnGetText
PM MAIL   Вверх
Akella
Дата 19.1.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Код

    case
        WHEN (A.IS_PHONE = 'F') THEN '-'
        WHEN (A.IS_PHONE = 'T') THEN '+'
        ELSE '?'
    end as IS_PHONE,


сделал так, спасибо Алексу (+)
PM MAIL   Вверх
Alex
Дата 19.1.2006, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Akella, Только забыл упомянуть, что это в синтаксисе Firebird 1.5 и выше


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.