pintar o coluna do dbgrid quando ordeno a coluna
a funccao para pintar a coluna do dbgrido nesta funcao
procedure Tctpc0501.DBGrid1TitleClick(Column: TColumn);
var
OrdenaDescAnt:Boolean;
Idx:TIndexDef;
Begin
If Not TClientDataSet(Column.Grid.DataSource.DataSet).Active Then
Abort; // O índice já está em uso
TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.update;
if (Column.Field.FieldName=TClientDataSet(Column.Grid.DataSource.DataSet).IndexName) then
begin
OrdenaDescAnt := (ixDescending in TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName).Options);
TClientDataSet(Column.Grid.DataSource.DataSet).DeleteIndex(Column.Field.FieldName);
end; if(TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.IndexOf(Column.Field.FieldName)) > -1 then
Idx := TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName)
else
idx := nil; if OrdenaDescAnt then
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [], '', '', 0)
else
idx.Options := idx.Options - [ixdescending];
end
else
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [ixdescending], '', '', 0)
else
idx.Options := idx.Options + [ixdescending];
end;
TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := Column.Field.FieldName; ws_campo:= Column.Field.FieldName;
ClientDataSet1.First;
ledconsulta.SetFocus; end;
var
OrdenaDescAnt:Boolean;
Idx:TIndexDef;
Begin
If Not TClientDataSet(Column.Grid.DataSource.DataSet).Active Then
Abort; // O índice já está em uso
TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.update;
if (Column.Field.FieldName=TClientDataSet(Column.Grid.DataSource.DataSet).IndexName) then
begin
OrdenaDescAnt := (ixDescending in TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName).Options);
TClientDataSet(Column.Grid.DataSource.DataSet).DeleteIndex(Column.Field.FieldName);
end; if(TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.IndexOf(Column.Field.FieldName)) > -1 then
Idx := TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName)
else
idx := nil; if OrdenaDescAnt then
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [], '', '', 0)
else
idx.Options := idx.Options - [ixdescending];
end
else
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [ixdescending], '', '', 0)
else
idx.Options := idx.Options + [ixdescending];
end;
TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := Column.Field.FieldName; ws_campo:= Column.Field.FieldName;
ClientDataSet1.First;
ledconsulta.SetFocus; end;
Jorge Barbosa
Curtidas 0
Respostas
Wesley Yamazack
13/01/2010
Olá amigo, Vamos as implementações.
Crie uma Variável na seção private
type
TFrmUF = class(TFrmPadrao)
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
DBGrid1: TDBGrid;
procedure BtnPesquisaClick(Sender: TObject);
procedure BtnNovoClick(Sender: TObject);
procedure BtnEditarClick(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
private
{ Private declarations }
OldColumn : TColumn;
public
{ Public declarations }
end;
Agora no seu evento faça o seguinte
procedure TFrmUF.DBGrid1TitleClick(Column: TColumn);
var
OrdenaDescAnt:Boolean;
Idx:TIndexDef;
Begin
if Assigned(OldColumn) then
begin
OldColumn.Title.Font.Color := clBlack;
OldColumn.Title.Font.Style := [];
end;
OldColumn := Column;
If Not TClientDataSet(Column.Grid.DataSource.DataSet).Active Then
Abort;
// O índice já está em uso
TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.update;
if (Column.Field.FieldName = TClientDataSet(Column.Grid.DataSource.DataSet).IndexName) then
begin
OrdenaDescAnt := (ixDescending in TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName).Options);
TClientDataSet(Column.Grid.DataSource.DataSet).DeleteIndex(Column.Field.FieldName);
end;
if(TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.IndexOf(Column.Field.FieldName)) > -1 then
Idx := TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName)
else
idx := nil;
if OrdenaDescAnt then
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [], '', '', 0)
else
idx.Options := idx.Options - [ixdescending];
end
else
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [ixdescending], '', '', 0)
else
idx.Options := idx.Options + [ixdescending];
end;
TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := Column.Field.FieldName;
Column.Title.Font.Color := clBlue;
Column.Title.Font.Style := [fsBold];
end;
Um abraço
Wesley Y
Crie uma Variável na seção private
type
TFrmUF = class(TFrmPadrao)
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
DBGrid1: TDBGrid;
procedure BtnPesquisaClick(Sender: TObject);
procedure BtnNovoClick(Sender: TObject);
procedure BtnEditarClick(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
private
{ Private declarations }
OldColumn : TColumn;
public
{ Public declarations }
end;
Agora no seu evento faça o seguinte
procedure TFrmUF.DBGrid1TitleClick(Column: TColumn);
var
OrdenaDescAnt:Boolean;
Idx:TIndexDef;
Begin
if Assigned(OldColumn) then
begin
OldColumn.Title.Font.Color := clBlack;
OldColumn.Title.Font.Style := [];
end;
OldColumn := Column;
If Not TClientDataSet(Column.Grid.DataSource.DataSet).Active Then
Abort;
// O índice já está em uso
TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.update;
if (Column.Field.FieldName = TClientDataSet(Column.Grid.DataSource.DataSet).IndexName) then
begin
OrdenaDescAnt := (ixDescending in TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName).Options);
TClientDataSet(Column.Grid.DataSource.DataSet).DeleteIndex(Column.Field.FieldName);
end;
if(TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.IndexOf(Column.Field.FieldName)) > -1 then
Idx := TClientDataSet(Column.Grid.DataSource.DataSet).IndexDefs.Find(Column.Field.FieldName)
else
idx := nil;
if OrdenaDescAnt then
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [], '', '', 0)
else
idx.Options := idx.Options - [ixdescending];
end
else
begin
if(Idx = nil)then
TClientDataSet(Column.Grid.DataSource.DataSet).AddIndex(Column.Field.FieldName, Column.Field.FieldName, [ixdescending], '', '', 0)
else
idx.Options := idx.Options + [ixdescending];
end;
TClientDataSet(Column.Grid.DataSource.DataSet).IndexName := Column.Field.FieldName;
Column.Title.Font.Color := clBlue;
Column.Title.Font.Style := [fsBold];
end;
Um abraço
Wesley Y
GOSTEI 0
Wesley Yamazack
13/01/2010
Olá amigo,
Deixei de esclarecer alguma dúvida sua ? Ficou claro o exemplo ? Esta precisando de mais alguma ajuda ?
Podemos encerrar o chamado ?
Um abraço
Wesley Y
Deixei de esclarecer alguma dúvida sua ? Ficou claro o exemplo ? Esta precisando de mais alguma ajuda ?
Podemos encerrar o chamado ?
Um abraço
Wesley Y
GOSTEI 0
Jorge Barbosa
13/01/2010
sim ficou podemos enncerrar sim
GOSTEI 0
Jorge Barbosa
13/01/2010
sim ficou podemos enncerrar sim
GOSTEI 0
Jorge Barbosa
13/01/2010
sim ficou podemos enncerrar sim
GOSTEI 0