GARANTIR DESCONTO

Fórum Configurar colunas do DbGrid #354184

21/02/2008

0

Boa tarde a todos,

Eu gostária de saber como posso escolher em tempo de execução as colunas de um dbgrid que eu quero que apareça, e salvar essa configuração no meu usuário.
Tipo mostrar as colunas em listbox e escolher somente as que eu quero visualizar.

Obrigado,


Edsant

Edsant

Responder

Posts

21/02/2008

Joaoshi

Colega, parte da resposta:

DbGrid.Columns.Items[1].Visible := false;

Espero ter ajudado.


Responder

Gostei + 0

21/02/2008

Paulo_amorim

Olá

Como mostrou o joaoshi, esse código exibe ou não as colunas.
Mas vai além: a partir do Columns, vc pode carregar o ListBox, exibir e salvar os dados. Para esse caso, vc poderia ter 2 listbox, um com as colunas disponíveis e outra com as colunas visíveis.

Se o que vc quer é configurar o perfil de usuário, seria desejável vc ter essa configuração em bando de dados. É o caso? Se sim, vc pode usar o ListBox de colunas visíveis para carregar sua query de INSERT.

Espero que ajude.
Até+


Responder

Gostei + 0

22/02/2008

Edsant

Como faço pra carregar o listbox com as colunas da DBgrid?

Obrigado


Responder

Gostei + 0

22/02/2008

Edsant

Ola amigo,

Já consegui elaborar o código:

var
I: Integer;
begin
for I := 0 to DBGrid1.FieldCount - 1 do
ListBox1.Items.Add( DbGrid1.Columns.Items[I].FieldName);

depois coloquei o codigo do amigo na listbox

var
I : integer;
begin
I:= ListBox1.ItemIndex;
DbGrid1.Columns.Items[I].Visible := false;

agora só falta salvar essa configuração no perfil do usuário...
qual a melhor maneira de fazer isso?


se alguem precisar de alguma coisa estamos ai....
Obrigado...


Responder

Gostei + 0

22/02/2008

Paulo_amorim

Olá

Se vc está usando banco de dados, pode utilizá-lo.

Se não, acho que a melhor forma é guardar as configurações em arquivo.
Nesse caso, o arquivo é carregado no momento da autenticação e vc pode rodar uma procedure parecida com essa sua pras colunas que ele já desabilitou/habilitou.

Espero que ajude

Até+


Responder

Gostei + 0

22/02/2008

Edsant

coloquei esse codigo pra trazer as colunas da grid, mas ela esta trazendo em order alfabetica não na ordem do index vc sabe pq?

var
I: Integer;
begin
for I := 0 to DBGrid1.FieldCount - 1 do
ListBox1.Items.Add( DbGrid1.Columns.Items[I].FieldName);


Responder

Gostei + 0

22/02/2008

Paulo_amorim

Olá

Realmente eu não sei, e eu to sem o Delphi aqui pra fazer o teste...
O DBGrid mesmo tá em ordem alfabética na tela?

Se não, dá uma debugada pra ver se é ele quem envia os dados em ordem alfabética ou é o TStrings q tá fazendoisso...

Dei uma pesquisada sobre isso, mas por enquanto não achei algo parecido.

Até+


Responder

Gostei + 0

22/02/2008

Edsant

Coloquei a propriedade sorted do listbox para false e resolveu esse problema.


então ficou assim:

//Carrega as colunas da grid
procedure TFColunas.FormActivate(Sender: TObject);
var
I: Integer;
Nome : TForm;
begin
Nome := FAutores;
SrcList.Clear;
for I := 0 to FAutores.DBGrid1.FieldCount - 1 do
SrcList.Items.Add(FAutores.DBGrid1.Columns.Items[I].Title.Caption);
SrcList.CheckAll;
end;

//Deixa invisivel as desmarcadas e visivel as marcadas
procedure TFColunas.OKBtnClick(Sender: TObject);
var
I : integer;
begin
for I := 0 to srcList.Items.Count - 1 do
begin
if not srcList.Checked[I] then
FAutores.DbGrid1.Columns.Items[I].Visible := false
else
FAutores.DbGrid1.Columns.Items[I].Visible := True;
end;
end;

Só mais uma coisa, pra finalizar: O nome do meu formulario que esta a dbgrid é FAutores... mas eu tenho outros formularios que tb vou fazer esse esquema das colunas. Para não criar um formColuna para cada cadastro eu queria carregar o nome do form ativo para uma variavel tipo:

[b:d972cd85d3]NomedoFormulario[/b:d972cd85d3].DBGrid1.Columns.Items[I].Title.Caption

Que tipo de variavel eu crio?

tentei uma String, mas dá erro.

Agredeço a compreenção e a paciencia de todos..


Responder

Gostei + 0

10/03/2008

Paulo_amorim

Olá

O ideal é usar uma função genérica. Nesse caso, vc pode passra o form em si
procedure PreencheDBGrid( Sender: TForm)
var ...
begin
...
end;


E na chamada ficaria apenas

procedure TFColunas.FormActivate(Sender: TObject)
begin
  PreencheDBGrid(Self);
end;


Não tinha visto a resposta, desculpe a demora.
Espero que ajude.

Até+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar