На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rouse_, jack128, Krid
  
    > Подмена данных в визуальных DB компонентах
      у всех TField существует свойство DisplayText которое используется всеми визуальными компонентами чувствительными к данным (DataAware), в том числе и TDBGrid'ом. Т.е. TDBGrid выводит именно это свойство. В свою очередь, значение этого свойства по умолчанию равно значению из поля БД, с учетом свойства DisplayFormat (у кого оно есть). Но это по умолчанию.
      Реально-же, у всех TField есть событие OnGetText. Если оно определено для поля, то DisplayText этого поля будет возвращать то, что вернет OnGetText.
      Словами слишком запутанно :), проще на примере:
      Если поля созданы в дизайнере, то требуемому полю (например FFF) вешаем обработчик FFFOnGetText событию OnGetText.
      Если-же поля создаются динамически, то соответственно вешаем обработчик динамически.
      Пример обработчика:
      ExpandedWrap disabled
        procedure FFFOnGetText (Sender: TField; var Text: String; DisplayText: Boolean);
        begin
          if  DisplayText  then  Text := AnsiUpperCase(Text);
        end;

      С таким обработчиком, в поле FFF DBGrid'а, все символы будут заглавными, вне зависимости какие они в БД.
      Естественно в БД они не меняются. При этом возникает интересный эффект. Если вы начнете редактировать поле FFF, то оно приобретет вид такой как в БД :), до тех пор пока Вы не закончите редактирование.
      Естественно это работает и для TDBEdit и пр.

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

      Автор: Петрович
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0247 ]   [ 17 queries used ]   [ Generated: 19.03.24, 08:05 GMT ]