Como criar um DBGrid baseado em checkboxes ?
Tenho uma conexão com o BD Access. Os dados do access estão em uma ADOTable e são mostrados por um DBGrid.
Quero colocar alguns checkbox com alguns dados, por exemplo, nome e endereço.
Se o checkbox do nome estiver marcado, o DBGrid mostra a coluna de nomes, se não estiver marcado ele não mostra.
Como posso fazer isso?
Obrigado!
Quero colocar alguns checkbox com alguns dados, por exemplo, nome e endereço.
Se o checkbox do nome estiver marcado, o DBGrid mostra a coluna de nomes, se não estiver marcado ele não mostra.
Como posso fazer isso?
Obrigado!
Matheus Gomes
Curtidas 0
Respostas
Joel Rodrigues
25/07/2013
Você pode exibir e ocultar as colunas do DBGrid da seguinte forma:
DBGrid1.Columns[0].Visible := checkBox1.Checked;
GOSTEI 0
Matheus Gomes
25/07/2013
Consegui ocultar as colunas da maneira que me disse, mas tenho um probleminha.
Tenho um botão que exporta os dados do DBGrid para o Excel e quando clico nele, todas as colunas são exportadas.
Quero encontrar uma maneira de exportar apenas as colunas que não estão invisíveis no DBGrid.
Veja o código para exportação:
Tenho um botão que exporta os dados do DBGrid para o Excel e quando clico nele, todas as colunas são exportadas.
Quero encontrar uma maneira de exportar apenas as colunas que não estão invisíveis no DBGrid.
Veja o código para exportação:
procedure TFormRelPers.Button2Click(Sender: TObject);
var linha, coluna: integer;
planilha: variant;
valorCampo: string;
begin
planilha:= CreateOleObject('Excel.Application');
planilha.Workbooks.add(1);
planilha.Cells.Select;
planilha.Selection.NumberFormat := '@';
planilha.caption:= 'Relatório Personalizado';
planilha.visible:= true;
AdoTable1.First;
for linha:= 0 to AdoTable1.RecordCount-1 do
begin
for coluna:= 1 to AdoTable1.FieldCount do
begin
valorCampo:= AdoTable1.Fields[coluna-1].AsString;
planilha.cells[linha+2,coluna]:= valorCampo;
end;
AdoTable1.Next;
end;
for coluna:=1 to AdoTable1.FieldCount do
begin
valorCampo:= AdoTable1.Fields[coluna-1].DisplayLabel;
planilha.cells[1,coluna]:= valorCampo;
end;
planilha.columns.AutoFit;
end;GOSTEI 0
Joel Rodrigues
25/07/2013
No for interno em que você faz a exportação, faça a verificação se a coluna do grid está visível. Por exemplo:
for linha:= 0 to AdoTable1.RecordCount-1 do begin for coluna:= 1 to AdoTable1.FieldCount do begin if dbGrid1.Columns[coluna].Visible then begin valorCampo:= AdoTable1.Fields[coluna-1].AsString; planilha.cells[linha+2,coluna]:= valorCampo; end; end; AdoTable1.Next; end;
GOSTEI 0
Matheus Gomes
25/07/2013
Consegui fazer com algumas mudanças. Muito obrigado pela sua ajuda amigo!
Vou deixar o código que usei aqui caso alguém queira usá-lo:
Vou deixar o código que usei aqui caso alguém queira usá-lo:
procedure TFormRelPers.Button2Click(Sender: TObject);
var linha, coluna, sub: integer;
planilha: variant;
valorCampo: string;
begin
planilha:= CreateOleObject('Excel.Application');
planilha.Workbooks.add(1);
planilha.Cells.Select;
planilha.Selection.NumberFormat := '@';
planilha.caption:= 'Relatório Personalizado';
planilha.visible:= true;
AdoTable1.First;
for linha:= 0 to AdoTable1.RecordCount-1 do
begin
sub:=0;
for coluna:= 1 to AdoTable1.FieldCount do
begin
if DBGrid1.Columns[coluna].Visible then
begin
valorCampo:= AdoTable1.Fields[coluna-1].AsString;
planilha.cells[linha+1,coluna-sub]:= valorCampo;
End
Else
Begin
sub:=sub+1;
End;
end;
AdoTable1.Next;
end;
sub:=0;
for coluna:=1 to AdoTable1.FieldCount do
begin
if DBGrid1.Columns[coluna].Visible then
begin
valorCampo:= AdoTable1.Fields[coluna-1].DisplayLabel;
planilha.cells[1,coluna-sub]:= valorCampo;
End
Else
Begin
sub:=sub+1;
End;
end;
planilha.columns.AutoFit;
end;GOSTEI 0
Joel Rodrigues
25/07/2013
Show de bola, amigo. Que bom que deu certo e obrigado por compartilhar o código.
Neste caso estou encerrando o tópico.
Abraço.
Neste caso estou encerrando o tópico.
Abraço.
GOSTEI 0