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;
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;
设置某行,颜色
试试
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,' ¡Ì')
颜色:
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 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;