Change DBGRID row color to field value in delphi

How to change the color of dbgrid rows that have the same value in a field in delphi?

for example, all lines that have the same teacher

Note: these rows are grouped and enter each other in dbgrid

early

+4
source share
1 answer

You can easily implement this using the DBGrids onDrawColumnCell event:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Table1.FieldByName('Teacher').AsString = 'Joe' then DBGrid1.Canvas.Brush.Color:=clRed; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; 

However, if you do not know the name of Teacher, you will have to implement some kind of recursive action, this is my implementation:

 var TeacherStringList : TStringList; lastColorUsed : TColor; AColors : Array of TColor; function mycolor: TColor; begin result := RGB(Random(256), Random(256), Random(256)); end; procedure TForm3.Button1Click(Sender: TObject); var CurrS : String; Index : Integer; begin if TeacherStringList.Count <> 0 then TeacherStringList.Clear; Table1.DisableControls; try while not Table1.Eof do begin CurrS := Table1.FieldByName('Teacher').AsString; if (not TeacherStringList.Find(CurrS,Index)) and (not currS.IsEmpty) then TeacherStringList.Add(CurrS); Table1.Next; end; Table1.First; SetLength(AColors,TeacherStringList.Count); for Index := Low(AColors) to High(AColors) do AColors[Index] := mycolor; finally Table1.EnableControls; end; end; procedure TForm3.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Index : integer; begin if (TeacherStringList.Find(Table1.FieldByName('Teacher').AsString,Index)) then DBGrid1.Canvas.Brush.Color:= AColors[index]; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; procedure TForm3.FormCreate(Sender: TObject); begin teacherStringList := TStringList.Create; teacherStringList.Sorted := True; end; procedure TForm3.FormDestroy(Sender: TObject); begin teacherStringList.Free; end; 
+13
source

Source: https://habr.com/ru/post/1483218/


All Articles