A partir de agora iremos criar índice em tempo de projeto, iremos definir o índice em run-time, ou seja, em tempo de execução do projeto.
Selecione o Formulário e no evento OnCreate coloque o seguinte código:
procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
cdsPessoa.Open;
cdsPessoa.IndexFieldNames:='nome';
end;
A propriedade IndexFiledNames recebe uma string, aqui estamos passando o nome do campo que queremos ordenar, podemos também ordenar por qualquer outro campo da sua tabela, basta separá-los por ponto e vírgua (;).
Após o campo Nome, coloque o campo salario e execute a aplicação e perceba como ficou a ordenação dos campos.
procedure TfrmPrincipal.FormCreate(Sender:
TObject);
begin
cdsPessoa.Open;
cdsPessoa.IndexFieldNames:='Nome; Salario';
end;
A propriedade IndexFiledNames toma como primeira referência para montar o índice o campo nome e depois o campo salario.
Mas e se quiséssemos clicar em determinada coluna do DbGrid e ele ordenar por ela. Para isso iremos utilizar o evento OnTitleClick do DbGrid, coloque o seguinte código nesse evento:
procedure TfrmPrincipal.dbgPessoaTitleClick(Column:
TColumn);
begin
cdsCliente.IndexFieldNames:= Column.FieldName;
end;
Para trabalharmos com índices, basta definir o nome do campo na propriedade IndexFieldNames. Como não sabemos qual a coluna que o usuário irá clicar utilizamos a propriedade Column do DbGrid e logo depois passamos o nome do campo através da propriedade FieldName do ClientDataSet. A propriedade IndexFieldNames aceita apenas o nome do campo a ser ordenado. Se você selecionar o DbGrid e clicar na reticência na propriedade column, você perceberá que lá está todos os nossos campos que estão no ClientDataSet. A propriedade FieldName representa o nome do campo que o usuário clicou.
Execute a aplicação e clique em qualquer coluna do DbGrid e perceba que após o clique ele ordena a coluna do DbGrid em ordem crescente.
Se você tiver mais de um índice em um dataset basta atribuí-lo de acordo com a sua necessidade.
Método GetIndexName
Para sabermos informações sobre um índice que esteja em memória, temos que utilizar o método GetIndexName, que nos retorna como paramento um Tstrings, no qual armazena os nomes de índice resultantes.
Adicione no formulário um ListBox e um Button e no trecho de código a seguir nos mostra como exibir num ListBox os nomes de todos os índices definidos para um dataset:
procedure TfrmPrincipal.Button1Click(Sender:
TObject);
begin
cdsPessoa.GetIndexNames(ListBox1.Items);
end;
Update
Para atualizarmos um índice temos que utilizar o método Update do indexDefts, ou seja, estamos atualizando a lista de índice caso tenha alguma alteração na mesma. Como mostra o código a seguir:
procedure TfrmPrincipal.Button2Click(Sender: TObject);
begin
cdsPessoa.IndexDefs.Update;
end;
Fico por aqui, e bons estudos.
Rubens Antunes
Autor do Livro: Delphi – Faça Uma Aplicação Comercial