pintar o coluna do dbgrid quando ordeno a coluna

13/01/2010

 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;
Jorge Barbosa

Jorge Barbosa

Curtidas 0

Respostas

Wesley Yamazack

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
GOSTEI 0
Wesley Yamazack

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
GOSTEI 0
Jorge Barbosa

Jorge Barbosa

13/01/2010

sim ficou podemos enncerrar sim
GOSTEI 0
Jorge Barbosa

Jorge Barbosa

13/01/2010

sim ficou podemos enncerrar sim
GOSTEI 0
Jorge Barbosa

Jorge Barbosa

13/01/2010

sim ficou podemos enncerrar sim
GOSTEI 0
POSTAR