DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Índice: Criando uma Unit - Delphi

Veja neste artigo como criar uma ordenação no ClientDataSet e guardar esta função em uma Unit


Será que toda vez que precisarmos ordenar um ClientDataSet, teremos que colocar esse código todo no evento OnTitleClick, claro que não, para isso podemos utilizar uma Unit para guardar o nosso código e ser utilizado em qualquer parte do nosso projeto. Vamos a prática, Crie uma Unit clicando em File/New/Unit Delphi, a unit é muito comum em Orientação a objeto. Ela nos permite criar classes é métodos entre outras funcionalidades. Salve-a como Uordenar e Coloque o seguinte código:

 

 

1 unit Uordenar;

 

2 interface

3  Uses DBClient, DBGrids, Graphics, DB;

 

4 type

5    TOrdenar = Class

6    public

7     class procedure orderna(var cds : TClientDataSet;var dbg : TDBGrid;column : TColumn);

8    end;

9 implementation

 

Tecle Ctrl+Shift+C para implementarmos a classe, podemos perceber que o Delphi  criou essa classe logo mais abaixo, coloque o seguinte código:

 

{ TOrdenar }

10 class procedure TOrdenar.orderna(var cds: TClientDataSet; var dbg: TDBGrid;

11  column: TColumn);

12 var

13  vName:String;

14 Opcao:TIndexOptions;

15 begin

16  if cds.IndexName = Column.FieldName + '_ASC' then

17  begin

18    vName:= Column.FieldName + '_DESC';

19    Opcao:= [ixDescending];

20  end

21  else

22  begin

23    vName:= Column.FieldName + '_ASC';

24    Opcao:= [];

25  end;

26  if cds.IndexDefs.IndexOf(vName) < 0 then

27  begin

28    cds.AddIndex(vName,Column.FieldName, Opcao);

29    cds.IndexName:=vName;

30    cds.First;

31  end;

end;

 

Nota

Class procedure é um método que opera sobre a classe e não sobre a instância dessa classe. Ele pode ser executado sem a necessidade se criar o objeto da classe. Podemos utilizar também um Class function.

 

 

Este é o mesmo código do evento OntitleClick do DbGrid a diferença que aqui nós não sabemos o nome do ClientDataSet nem o do DbGrid, muito menos o campo o qual o usuário escolheu para ordenar. Para isso utilizamos variáveis que irão receber os dados destes componentes. Iremos utilizar três variáveis:

cds do tipo TClientDataSet: Ele receberá um ClientDataSet.

dbg do tipo TDBGrid: Receberá um DbGrid.

Column do tipo TColumn: Receberá a coluna e seu fieldname que o usuário escolheu para ordenar.

            Para fazermos uso dessa unit precisamos passar esses três paramentos, para que esse método seja executado.

            Salve a nossa Unit e retorne ao nosso formulário e coloque o seguinte código no evento OnTitleClick:

 

 

1 procedure TfrmPrincipal.dbgPessoaTitleClick(Column: TColumn);

2 begin

3          TOrdenar.orderna(cdsPessoa, dbgPessoa, Column);

4 end;

 

Coloque agora na clausula uses do formulário o nome da unit Uordenar, execute a aplicação e veja que estamos usando agora o código da unit. Você pode declarar essa unit em qualquer parte do seu projeto e fazer uso em qualquer DbGrid do seu projeto que esteja ligado é claro a um ClientDataSet.

 

 

Dica

Para criarmos uma classe basta digitar class e clicar em Ctrl+J e o Delphi criará a estrutura da classe.

 

 

Mudando a cor da coluna e restringindo campos

 

            Podemos também definir para o usuário, qual coluna está ordenado o nosso índice, facilitando assim a sua visualização, vamos determinar que toda vez que o usuário clicar na coluna ela mudará de cor, eu escolhi a cor verde mas você pode escolher qualquer cor que tenha na propriedade Color do DbGrid.

            Em nossa Unit coloque o seguinte código como demonstra a listagem 03:

 

Listagem 03 – Definindo a Cor da Coluna

var

1  I    : Integer;

  vName:String;

  Opcao:TIndexOptions;

begin

 

2  if column.Field.FieldKind in [fkCalculated, fkLookup, fkAggregate] then

3   Exit;

 

4  if column.Field.DataType in [ftBlob, ftMemo] then

5   Exit;

 

6 for i := 0 to dbg.Columns.Count -1 do

7 begin

8   dbg.Columns[i].Title.Font.Color := clBlack;

9   Column.Title.Font.Color := clGreen;

10  end;

 

Linha 1: Crio uma variável para controlar o nosso laço utilizando um for.

Linha 2: Verifico se o campo clicado pelo usuário é do tipo Calculado, Lookup ou agregado, caso venha ser eu dou um exit na linha 3 e saio do método.

Linha 4: Verifico também se o usuário clicou em algum campo Blob ou Memo, caso tenha clicado eu saio também do método.

Linha 6: Mando ele percorrer todas as colunas do DbGrid.

Linha 8: Passo a cor original da coluna e logo depois eu coloco a cor desejada na linha 9

 

Execute a aplicação.

 

Dica

Campos Calculados, Lookup, Agregados, Blob e Memo, não podem ser ordenados pelo ClientDataSet, o único campo de memória que pode é o InternalCalc.

 

Fico por aqui, até o próximo.

 

Rubens Antunes

Autor do Livro: Delphi – Faça Uma Aplicação Comercial






    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



[Este post ainda não foi associado a uma sequência]
Publicidade
Autor
Rubens Antunes

Programador Delphi desde de 2004 e Autor do Livro Delphi - Faça Uma Aplicação Comercial


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
1   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03