FAQ VCL
Компоненты\DBGrid

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как изменить цвета строк в DBGrid?

// В примере меняется цвет каждой нечетной строки

procedure TMainFrm.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
   // Красим нечетные строки
   if TDBGrid( Sender ).DataSource.DataSet.RecNo mod 2 = 1 then
      TDBGrid( Sender ).Canvas.Brush.Color := clInfoBk;
   // Восстанавливаем выделение текущей позиции курсора
   if gdSelected in State then
     begin
        TDBGrid( Sender ).Canvas.Brush.Color := clHighLight;
        TDBGrid( Sender ).Canvas.Font.Color := clHighLightText;
      end;
   // Просим GRID перерисоваться самому
   TDBGrid( Sender ).DefaultDrawColumnCell( Rect, DataCol, Column, State );
end;


Как изменить цвет заголовка (Title) колонки в DBGrid?

// Способ первый
// Для DrawingStyle = gdsClassic
procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGrid1.Columns.Items[0].Title.Color := clInfoBk;
end;

// Способ первый
// Для DrawingStyle <> gdsClassic
type
  TDBGrid = class(Vcl.DBGrids.TDBGrid)
  protected
    procedure DrawCellBackground(const ARect: TRect; AColor: TColor;
      AState: TGridDrawState; ACol, ARow: Integer); override;
  end;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGrid1.Columns.Items[0].Title.Color := clInfoBk;
end;

procedure TDBGrid.DrawCellBackground(const ARect: TRect; AColor: TColor;
  AState: TGridDrawState; ACol, ARow: Integer);
begin
  inherited;

  if (ACol >= 0) and (ARow = -1) and (Columns[ACol].Title.Color <> clBtnFace) then
  begin
    Canvas.Brush.Color := Columns[ACol].Title.Color;
    Canvas.FillRect(ARect);
  end;
end;


Как узнать номер выделенной строки в DBGrid?

type
  DBGridHack = class(TDBGrid);

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(DBGridHack(DBGrid1).Row));
end;


Как выделить все строки в DBGrid?

// dgMultiSelect должен быть True
procedure TForm1.Button1Click(Sender: TObject);
begin
   ADOQuery1.First;
   while not ADOQuery1.Eof do
   begin
      DBGrid1.SelectedRows.CurrentRowSelected := True;
      ADOQuery1.Next;
   end;
end;


Как отключить реакцию DBGrid на изменение позиции курсора в DataSet?

procedure TForm1.Button1Click(Sender: TObject);
var
  Bookmark: TBytes;
begin
   Bookmark := DataSet.Bookmark;
   DataSet.DisableControls;
   try
      // работа с DataSet
   finally
      DataSet.Bookmark := Bookmark;
      DataSet.EnableControls;
   end;
end;

При использовании материала - ссылка на сайт обязательна