Как улучшить внешний вид DBGrid (часть 2)

Как улучшить внешний вид DBGrid 2

В предыдущей статье «Как улучшить внешний вид DBGrid» мы рассмотрели некоторые из приемов визуального улучшения внешнего вида объекта представления данных в табличном виде.

Очень часто DBGrid используется для просмотра результатов выборки данных из таблицы. Причем не важно, является ли это выборка из одной или нескольких таблиц, объединенных посредством ключевых полей.

На мой взгляд, довольно удобным является представление таблицы в таком виде, которое будет подсвечивать поле отдельным цветом, по которому осуществлялась выборка. Давайте сделаем такую таблицу DBGrid, как на рисунке:

Обратим внимание на первый столбец таблицы. Он окрашен в светло-зеленый цвет. То есть, по данному столбцу осуществлялся поиск — были выбраны должности, которые входят в группу «Терапевты». Точно также можно сделать окрашивание по любому столбцу. В данном случае, таблица состоит из двух столбцов, поэтому можно окрасить столбец «Должность»:

В данном случае выборка осуществлялась по полю «Должность» по неполному совпадению и в результат попали все записи с должностями, где фигурирует слово «хирург».

Для окрашивания нам понадобиться завести глобальную переменную строкового типа sTipFilter. В ней мы будем хранить условное название столбца. Об этом будет рассказано немного ниже. Пока что объявите эту переменную в главной форме программы. Это удобно, поскольку мы ее можем использовать во всех остальных формах. При этом не стоит забывать, что главная форма должна быть подключена в разделе Uses того модуля, где мы будем использовать нашу переменную.

В процедуре, где мы будем осуществлять фильтрацию данных, мы будем задавать значение для нашей переменной sTipFilter.

Процедура, которая осуществляет поиск выглядит следующим образом (у меня поиск осуществляется при создании формы, но это может быть и событие onClick кнопки):

procedure TfrmFindPositions.FormCreate(Sender: TObject);
var
     sFilter, sFilterSQL: string; //Переменная для поиска
begin
     adoResult.sql.Clear;
     adoResult.sql.add('SELECT ');
     adoResult.sql.add('Группы_должностей.idГруппы_должностей,');
     adoResult.sql.add('Группы_должностей.Группа,');
     adoResult.sql.add('Должности.idДолжности,');
     adoResult.sql.add('Должности.Должность');
     adoResult.sql.add('FROM группы_должностей');
     adoResult.sql.add('LEFT JOIN должности');
     adoResult.sql.add('ON группы_должностей.idГруппы_должностей =     должности.idГруппы_должностей');
     //Формируем условия для запроса
     if frmPositions.rbGroup.Checked then
     begin
          sFilter:=trim('%'+frmPositions.txtFilter.Text+'%');
          sFilterSQL:='WHERE Группы_должностей.Группа LIKE '''+sFilter+'''';
          sTipFilter:='Название группы';
     end;
     if frmPositions.rbPosition.Checked then
     begin
         sFilter:=trim('%'+frmPositions.txtFilter.Text+'%');
         sFilterSQL:='WHERE Должности.Должность LIKE '''+sFilter+'''';
         sTipFilter:='Должность';
     end;
     //Подстанавливаем условие для запроса
     adoResult.sql.add(sFilterSQL);
     adoResult.Open;
end;

Давайте обратим внимание на переменную sTipFilter, которую мы ранее объявляли в коде. Ей мы присваиваем произвольное строковое значение, которое мы задаем в зависимости от того, какой критерий поиска у нас указан.

Для раскрашивания столбца мы также будем использовать событие onDrawColumnCell нашего объекта DBGrid, которое известно нам по предыдущей статье (Как улучшить внешний вид DBGrid).

procedure TfrmFindPositions.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
   with TPeekAtCustomDBGrid(Sender) do
    begin
      if DataLink.ActiveRecord = Row - 1 then
      begin
        Canvas.Brush.Color := clBlue;
        Canvas.Font.Color := clYellow;
      end
    else
      if sTipFilter='Название группы' then TDBGrid(Sender).Columns[0].Color:=$0059B300; // то красим столбец Названия отдела
      if sTipFilter='Должность' then TDBGrid(Sender).Columns[1].Color:=$0059B300;
    end;
   // Перерисовываем DBGrid
     TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;

Здесь мы как раз проверяем значение нашей переменной sTipFilter, и в зависимости от значения мы окрашиваем тот или иной столбец.

Как видите процесс окрашивания не сложный, но он в значительной степени способен изменить внешний облик объекта DBGrid в лучшую сторону.

Понравилась статья? Поделиться с друзьями:
Блог Алексея Иванкова
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: