Como trocar a coluna do DBGrid de lugar

 

Olá, neste artigo mostrarei um forma bastante interessante de trabalhar com as colunas do DBGrid. Faremos a troca de posição das colunas usando o evento onTitleClick do DBGrid.

Quando o usuário clicar em uma coluna esta passará a ser a primeira coluna e a primeira trocará de lugar com a coluna clicada. A primeira coluna poderia ser usada para filtrar e/ou ordenar a tabela e sendo a coluna 0 (zero) fica mais fácil para identificar por qual coluna nossa table está ordenada/filtrada.

Desenhando o projeto

O design para este exemplo é bem compacto. Insira um TTable, um DataSource e um DBGrid. Altere suas propriedades conformes as tabelas abaixo. Sua tela deve se parecer com a  Figura 1.

 

Propriedade

Valor

Name

Table1

DataBaseName

DBDEMOS

TableName

Cients.dbf

Tabela 1. Propriedades do TTable

Propriedade

Valor

Name

DataSource1

DataSet

Table1

Tabela 2. Propriedades do TDataSource

Propriedade

Valor

Name

DbGrid1

DataSource

DataSource1

Tabela 3. Propriedades do TDbGrid

Coluna colorida      

Uma coisa que uso com bastante freqüência é colorir a primeira coluna, assim fica ainda mais fácil identificar por qual coluna o filtro/ordenação será feito. Para isso:

Clique duas vezes no DBGrid, adicione os todos campos. Em seguida selecione o primeiro campo, referente a primeira coluna, e mude a propriedade Color para clInfoBk ou uma cor de sua preferência.

 

 

Figura 1. Legenda explicativa da figura

Programação

Você verá que a programação não exige alto conhecimento. Apenas pegamos o nome da coluna selecionada e seu index. Em seguida “dizemos” que o FieldName da colunca selecionada é igual ao FieldName da coluna 0(zero), ou seja, o primeiro campo. Agora basta igualar o FieldName da coluna zero ao FieldName da coluna selecionada. Veja a Listagem 1.

 

Listagem 1. Descrição da listagem

procedure TForm1.DBGrid1TitleClick(Column: TColumn);

var

  nmColSel: string;

  idColSel: Integer;

begin

  nmColSel := Column.FieldName;

  idColSel := Column.Index;

  with DBGrid1 do

  begin

    Columns[idColSel].FieldName := Columns[0].FieldName;

    Columns[0].FieldName := nmColSel;

  end;

end;

Conclusões

Neste artigo aprendemos a trocar a coluna de um DBGrid em runtime e tornando sua visualização mais nítida.