点击排序var FSort,FSortField : string; procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin if not DBGrid1.Active then exit; for iFieldCount := 0 to DBGrid1.Columns.Count - 1 do begin if (Copy(DBGrid1.Columns[iFieldCount].Title.Caption,Length(DBGrid1.Columns[iFieldCount].Title.Caption)-1,2) = '▼') or (Copy(DBGrid1.Columns[iFieldCount].Title.Caption,Length(DBGrid1.Columns[iFieldCount].Title.Caption)-1,2) = '▲') then begin DBGrid1.Columns[iFieldCount].Title.Caption := Copy(DBGrid1.Columns[iFieldCount].Title.Caption,1,Length(DBGrid1.Columns[iFieldCount].Title.Caption)-3); break; end; end; if Column.FieldName = FSortField then begin if FSort = 'DESC' then FSort := 'ASC' else FSort := 'DESC'; end else begin FSortField := Column.FieldName; FSort := 'ASC'; end; if FSort = 'ASC' then Column.Title.Caption := Column.Title.Caption + ' ▲' else Column.Title.Caption := Column.Title.Caption + ' ▼'; Dataset1.Sort := Column.FieldName + ' ' + FSort;
实战Delphi数据网格色彩特效 Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。 以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。 1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。 file://在DbGrid的DrawColumnCell事件中编写如下代码: Case DataCol Mod 2 = 0 of True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色 False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色 End; DbGrid1.Canvas.Pen.Mode:=pmMask; DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State); 2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。 file://将上述代码修改为: Case DataCol Mod 2 = 0 of True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色 False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色 End; If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then If Not DbGrid1.SelectedRows.CurrentRowSelected then DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色 DbGrid1.Canvas.Pen.Mode:=pmMask; DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State); 上述两种方法突出了列的显示效果。 3.在数据网格中以红色突出显示当前选中的行: 设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码: if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色 DbGrid1.Canvas.pen.mode:=pmmask; DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State); 4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。 file://其它属性设置同3,将上述代码修改为: if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then begin Case DataCol Mod 2 = 0 of True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色 False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色 end; DbGrid1.Canvas.pen.mode:=pmmask; DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State); end; 5.横向斑马线,同时以红色突显当前行效果: file://其它属性设置同3,将上述代码修改为: Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断 True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示 False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示 end; if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示 DbGrid1.Canvas.Brush.color:=clRed; DbGrid1.Canvas.pen.mode:=pmMask; DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State); 6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。 file://其它属性设置同3,将上述代码修改为: Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断 True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示 False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示 end; If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then Case DataCol mod 2 = 0 of True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色 False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示 end; DbGrid1.Canvas.pen.mode:=pmMask; DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State); 7. 随意控制DBGrid 每一行的颜色: Var p : Integer; begin p := Table1.FindField('wage').AsInteger; //取得当前记录的Wage字段的值。 if(p < 500) then begin //程序将根据wage值设置各行的颜色。 Color := clGreen; Font.Style := [fsItalic]; //不仅可以改变颜色,还可以改变字体 end; if (p >= 500) And (p < 800) then Color := clRed; if(p >=800) then begin Color := clMaroon; Font.Style := [fsBold]; end; end;
强烈推荐你使用EhLib组件中的DBGridEh控件,绝对让你满意。
ExpressQuantumGrid 4very cool
在OnColumnItemDraw事件中加入自己的画单元的方法就可以了
排序: procedure Tform1.SortQuery(column:TColumn); var SqlStr,myFieldName,TempStr: string; OrderPos: integer; SavedParams: TParams; begin if not(Column.Field.FieldKind in [fklookup,fkdata]) then exit; if column.Field.FieldKind = fkdata then myFieldName := UpperCase(column.Field.FieldName) else myFieldName := UpperCase(column.Field.KeyFields); while Pos(myFieldName,'')<>0 do myFieldName := Copy(myFieldName,1,pos(myFieldName,'')-1) + ','+Copy(myFieldName,Pos(myFieldName,'')+1,100); with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do begin SqlStr := UpperCase(SQL.Text); if ParamCount > 0 then begin SavedParams := TParams.Create; SavedParams.Assign(Params); end; OrderPos := pos('ORDER',SqlStr); if (OrderPos = 0) or (pos(myFieldName,copy(SqlStr,OrderPos,100)) = 0) then TempStr := ' order by ' + myFieldName + ' Asc' else if pos('Asc',SqlStr) = 0 then TempStr := ' order by ' + myFieldName + ' Asc' else TempStr := ' order by ' + myFieldName + ' Desc'; if OrderPos <> 0 then SqlStr := copy(SqlStr,1,OrderPos - 1); SqlStr := SqlStr + TempStr; Active := False; SQL.Clear; SQL.Text := SqlStr; if ParamCount > 0 then begin Params.AssignValues(SavedParams); SavedParams.Free; end; Prepare; Open; end; end;procedure TForm1.DBGrid1TitleClick(Column: TColumn); begin SortQuery(Column); end;
颜色: procedure TDbgridForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin with DBGrid1 do begin if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then begin Canvas.Font.Color :=ClYellow; Canvas.Brush.Color :=ClNavy; end else begin if DataSource1.DataSet.RecNo mod 2<>0 then {判断当前数据是奇数还是偶数行} Canvas.brush.Color :=ClWhite {如果是奇数行,DBGrid背景以白色显示} else Canvas.brush.Color :=clgreen; //$00EAEAEA; {如果是偶数行,DBGrid背景以浅灰色显示} end; DefaultDrawColumnCell(Rect, DataCol, Column, State); {这行很关键的,一定不要遗漏了} end; end;
楼上的都说清楚了,我来upup,接接分......
设置某行,颜色 试试 procedure TdfrmSt_Decl.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin inherited; IF column.FieldName='IfPur' then begin IF column.Field.AsBoolean=true then begin DBGrid2.Canvas.Font.Height:=12; DBGrid2.Canvas.TextRect(Rect,Rect.left+1,Rect.top+1,''); end Else begin DBGrid2.Canvas.Font.Height:=12; DBGrid2.Canvas.TextRect(Rect,Rect.left+1,Rect.top+1,'·ñ'); end; end; end; IF Column.Field.AsBoolean then begin DBGrid2.Canvas.Font.Color:=clGreen; DBGrid2.Canvas.Font.Height:=12; DBGrid2.Canvas.Font.Style:=[fsBold]; DBGrid2.Canvas.TextRect(Rect,Rect.Left+1,Rect.Top+1,' ¡Ì')
楼上的n次方已经说得很透彻了,我只能说up了!
这个是颜色的: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, Grids, DBGrids,StdCtrls;type TForm1 = class(TForm) DBGrid1: TDBGrid; DataSource1: TDataSource; ADOQuery1: TADOQuery; Button1: TButton; procedure DBGrid1Enter(Sender: TObject); procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}function get_dbg_edit_text(dbgrid :tdbgrid):TEdit; var i:integer; begin result := nil; if not assigned(dbgrid) then exit; if not dbgrid.EditorMode then begin dbgrid.EditorMode:=true; dbgrid.EditorMode:=false; end; with dbgrid do for i:=0 to pred(componentcount) do if components[i] is Tcustomedit then begin result := tedit(components[i]); break; end;end;function get_dbg_edit(dbgrid : tdbgrid): string; var dbg_edit :TEdit; begin dbg_edit:=get_dbg_edit_text(dbgrid); if assigned(dbg_edit) then result := dbg_edit.text else result:=''; end;procedure TForm1.DBGrid1Enter(Sender: TObject); {显示当前编辑框背景颜色} var dbg_edit : tedit; begin dbg_edit:=get_dbg_edit_text(tdbgrid(sender)); if assigned(dbg_edit) then dbg_edit.color:=clyellow; end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin //DBGrid1DrawColumnCell事件。 //sex字段为女的,字体颜色为红色,其它的为蓝色: if Adoquery1.FieldByName('age').Asstring = '18' then DBGrid1.Canvas.Font.Color := clRed else DBGrid1.Canvas.Font.Color := clBlue; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;end. 这个是title排序的: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;type TForm1 = class(TForm) DBGrid1: TDBGrid; ADOQuery1: TADOQuery; DataSource1: TDataSource; Button1: TButton; procedure DBGrid1TitleClick(Column: TColumn); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBGrid1TitleClick(Column: TColumn); var i:integer; field_name:string; begin i:=column.Index; field_name:=adoquery1.Fields[i].FieldName; with adoquery1 do begin active := false; sql.Clear; sql.Add('select * from dbgrid_auto_wide order by '+field_name+''); active:=true; end; end;end.
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if not DBGrid1.Active then exit;
for iFieldCount := 0 to DBGrid1.Columns.Count - 1 do
begin
if (Copy(DBGrid1.Columns[iFieldCount].Title.Caption,Length(DBGrid1.Columns[iFieldCount].Title.Caption)-1,2) = '▼') or (Copy(DBGrid1.Columns[iFieldCount].Title.Caption,Length(DBGrid1.Columns[iFieldCount].Title.Caption)-1,2) = '▲') then
begin
DBGrid1.Columns[iFieldCount].Title.Caption := Copy(DBGrid1.Columns[iFieldCount].Title.Caption,1,Length(DBGrid1.Columns[iFieldCount].Title.Caption)-3);
break;
end;
end;
if Column.FieldName = FSortField then
begin
if FSort = 'DESC' then
FSort := 'ASC'
else
FSort := 'DESC';
end
else begin
FSortField := Column.FieldName;
FSort := 'ASC';
end;
if FSort = 'ASC' then
Column.Title.Caption := Column.Title.Caption + ' ▲'
else
Column.Title.Caption := Column.Title.Caption + ' ▼';
Dataset1.Sort := Column.FieldName + ' ' + FSort;
Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。
以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
file://在DbGrid的DrawColumnCell事件中编写如下代码:
Case DataCol Mod 2 = 0 of
True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
End;
DbGrid1.Canvas.Pen.Mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
file://将上述代码修改为:
Case DataCol Mod 2 = 0 of
True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
End;
If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
If Not DbGrid1.SelectedRows.CurrentRowSelected then
DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
DbGrid1.Canvas.Pen.Mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行:
设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
DbGrid1.Canvas.pen.mode:=pmmask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
file://其它属性设置同3,将上述代码修改为:
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
begin
Case DataCol Mod 2 = 0 of
True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
end;
DbGrid1.Canvas.pen.mode:=pmmask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
5.横向斑马线,同时以红色突显当前行效果:
file://其它属性设置同3,将上述代码修改为:
Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
end;
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示
DbGrid1.Canvas.Brush.color:=clRed;
DbGrid1.Canvas.pen.mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
file://其它属性设置同3,将上述代码修改为:
Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
end;
If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
Case DataCol mod 2 = 0 of
True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
end;
DbGrid1.Canvas.pen.mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
7. 随意控制DBGrid 每一行的颜色:
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic];
//不仅可以改变颜色,还可以改变字体
end;
if (p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;
procedure Tform1.SortQuery(column:TColumn);
var
SqlStr,myFieldName,TempStr: string;
OrderPos: integer;
SavedParams: TParams;
begin
if not(Column.Field.FieldKind in [fklookup,fkdata]) then
exit;
if column.Field.FieldKind = fkdata then
myFieldName := UpperCase(column.Field.FieldName)
else
myFieldName := UpperCase(column.Field.KeyFields);
while Pos(myFieldName,'')<>0 do
myFieldName := Copy(myFieldName,1,pos(myFieldName,'')-1) +
','+Copy(myFieldName,Pos(myFieldName,'')+1,100);
with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
begin
SqlStr := UpperCase(SQL.Text);
if ParamCount > 0 then
begin
SavedParams := TParams.Create;
SavedParams.Assign(Params);
end;
OrderPos := pos('ORDER',SqlStr);
if (OrderPos = 0) or (pos(myFieldName,copy(SqlStr,OrderPos,100)) = 0) then
TempStr := ' order by ' + myFieldName + ' Asc'
else
if pos('Asc',SqlStr) = 0 then
TempStr := ' order by ' + myFieldName + ' Asc'
else
TempStr := ' order by ' + myFieldName + ' Desc';
if OrderPos <> 0 then
SqlStr := copy(SqlStr,1,OrderPos - 1);
SqlStr := SqlStr + TempStr;
Active := False;
SQL.Clear;
SQL.Text := SqlStr;
if ParamCount > 0 then
begin
Params.AssignValues(SavedParams);
SavedParams.Free;
end;
Prepare;
Open;
end;
end;procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
SortQuery(Column);
end;
procedure TDbgridForm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
with DBGrid1 do
begin
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
begin
Canvas.Font.Color :=ClYellow;
Canvas.Brush.Color :=ClNavy;
end
else
begin
if DataSource1.DataSet.RecNo mod 2<>0 then {判断当前数据是奇数还是偶数行}
Canvas.brush.Color :=ClWhite {如果是奇数行,DBGrid背景以白色显示}
else
Canvas.brush.Color :=clgreen; //$00EAEAEA; {如果是偶数行,DBGrid背景以浅灰色显示}
end;
DefaultDrawColumnCell(Rect, DataCol, Column, State); {这行很关键的,一定不要遗漏了}
end;
end;
试试
procedure TdfrmSt_Decl.DBGrid2DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
inherited;
IF column.FieldName='IfPur' then
begin
IF column.Field.AsBoolean=true then
begin
DBGrid2.Canvas.Font.Height:=12;
DBGrid2.Canvas.TextRect(Rect,Rect.left+1,Rect.top+1,'');
end
Else
begin
DBGrid2.Canvas.Font.Height:=12;
DBGrid2.Canvas.TextRect(Rect,Rect.left+1,Rect.top+1,'·ñ');
end;
end;
end; IF Column.Field.AsBoolean then
begin
DBGrid2.Canvas.Font.Color:=clGreen;
DBGrid2.Canvas.Font.Height:=12;
DBGrid2.Canvas.Font.Style:=[fsBold];
DBGrid2.Canvas.TextRect(Rect,Rect.Left+1,Rect.Top+1,' ¡Ì')
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids,StdCtrls;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
Button1: TButton;
procedure DBGrid1Enter(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}function get_dbg_edit_text(dbgrid :tdbgrid):TEdit;
var i:integer;
begin
result := nil;
if not assigned(dbgrid) then exit;
if not dbgrid.EditorMode then
begin
dbgrid.EditorMode:=true;
dbgrid.EditorMode:=false;
end;
with dbgrid do for i:=0 to pred(componentcount) do
if components[i] is Tcustomedit then
begin
result := tedit(components[i]);
break;
end;end;function get_dbg_edit(dbgrid : tdbgrid): string;
var
dbg_edit :TEdit;
begin
dbg_edit:=get_dbg_edit_text(dbgrid);
if assigned(dbg_edit) then
result := dbg_edit.text
else result:='';
end;procedure TForm1.DBGrid1Enter(Sender: TObject);
{显示当前编辑框背景颜色}
var
dbg_edit : tedit;
begin
dbg_edit:=get_dbg_edit_text(tdbgrid(sender));
if assigned(dbg_edit) then dbg_edit.color:=clyellow;
end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
//DBGrid1DrawColumnCell事件。
//sex字段为女的,字体颜色为红色,其它的为蓝色:
if Adoquery1.FieldByName('age').Asstring = '18' then
DBGrid1.Canvas.Font.Color := clRed
else
DBGrid1.Canvas.Font.Color := clBlue;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;end.
这个是title排序的:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
Button1: TButton;
procedure DBGrid1TitleClick(Column: TColumn);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
i:integer;
field_name:string;
begin
i:=column.Index;
field_name:=adoquery1.Fields[i].FieldName;
with adoquery1 do begin
active := false;
sql.Clear;
sql.Add('select * from dbgrid_auto_wide order by '+field_name+'');
active:=true;
end;
end;end.