Fórum Configurar colunas do DbGrid #354184
21/02/2008
0
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
Curtir tópico
+ 0Posts
21/02/2008
Joaoshi
DbGrid.Columns.Items[1].Visible := false;
Espero ter ajudado.
Gostei + 0
21/02/2008
Paulo_amorim
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é+
Gostei + 0
22/02/2008
Edsant
Obrigado
Gostei + 0
22/02/2008
Edsant
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...
Gostei + 0
22/02/2008
Paulo_amorim
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é+
Gostei + 0
22/02/2008
Edsant
var
I: Integer;
begin
for I := 0 to DBGrid1.FieldCount - 1 do
ListBox1.Items.Add( DbGrid1.Columns.Items[I].FieldName);
Gostei + 0
22/02/2008
Paulo_amorim
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é+
Gostei + 0
22/02/2008
Edsant
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..
Gostei + 0
10/03/2008
Paulo_amorim
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é+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)