Copiar dados de um Dbgrid
Vamos começar essas duas funções servem para Copiar do TDBGrid o conteúdo para assim ser jogada para documentos como Word e Excel
Obs: Não esqueça de adicionar a Clipbrd nas uses;
Vamos precisar de:
- 1 - TDBGrid { dbgridCDS };
- 1 - TClientDataSet { CDS };
- 1 - TDataSource { dsCDS };
- 1 - TPopupMenu { pmCDS };
Primeiro passo: Vincule os componentes;
Segundo passo: Crie 2 campos no dbgridCDS CODIGO, DESCRICAO;
Terceiro passo: Jogue algumas informações para não ficar em branco o dbgridCDS
Quarto passo: Coloque o pmCDS vinculado com o dbgridCDS pela propriedade PopupMenu
Quinto passo: Crie três itens no pmCDS
Sexto passo: Marque as propriedades "AutoCheck = True" e "Checked = True"
No segundo item coloque o Código abaixo
1 - Segundo item "CopiarUmaLinhaGrid" coloque o evento abaixo
procedure TFPrincipal.miCopiarUmaLinhaGridClick(Sender: TObject);
begin
CopiarUmaLinhaGrid(dbgridCDS, miExibirtitulo.Checked);
end;
No segundo item coloque o Código abaixo
2 - Terceiro item "CopiarTodasLinhasGrid" coloque o evento abaixo
procedure TFPrincipal.miCopiarTodasLinhasGridClick(Sender: TObject);
begin
CopiarTodasLinhasGrid(dbgridCDS, miExibirtitulo.Checked);
end;
As funções em
procedure TFPrincipal.CopiarTodasLinhasGrid(DBGrid :TDBGrid; PastHeader :Boolean);
var
StrToCopy :string;
Idx,
IdxCol :Integer;
BookMark,
SavedBookMark :TBookMark;
begin
StrToCopy := EmptyWideStr;
if PastHeader then begin {Titulo das colunas}
StrToCopy := DBGrid.Columns[0].Title.Caption;
for IdxCol := 1 to DBGrid.Columns.Count -1 do
StrToCopy := format('%s'#9'%s', [StrToCopy, DBGrid.Columns[IdxCol].Title.Caption]);
StrToCopy := StrToCopy + sLineBreak;
end;
with DBGrid.DataSource.DataSet do begin
SavedBookMark := GetBookmark;
DisableControls;
First;
while not EOF do begin
StrToCopy := StrToCopy +DBGrid.Columns[0].Field.AsString;
for IdxCol := 1 to DBGrid.Columns.Count -1 do
StrToCopy := Format('%s'#9'%s', [StrToCopy, DBGrid.Columns[IdxCol].Field.AsString]);
StrToCopy := StrToCopy + sLineBreak;
Next;
end;
ClipBoard.Clear;
ClipBoard.SetTextBuf(PChar(StrToCopy));
GotoBookMark(SavedBookMark);
FreeBookMark(SavedBookMark);
EnableControls;
end;
end;
No código a baixo fará a cópia de uma linha apenas com a opção de cópia o titulo ou não
procedure TFPrincipal.CopiarUmaLinhaGrid(DBGrid: TDBGrid; PastHeader: Boolean);
var
StrToCopy :string;
Idx,
IdxCol :Integer;
BookMark,
SavedBookMark :TBookMark;
begin
if DBGrid.SelectedRows.Count = 0 then
Exit;
StrToCopy := EmptyWideStr;
if PastHeader then begin
StrToCopy := DBGrid.Columns[0].Title.Caption;
for IdxCol := 1 to DBGrid.Columns.Count -1 do
StrToCopy := format('%s'#9'%s', [StrToCopy, DBGrid.Columns[IdxCol].Title.Caption]);
StrToCopy := StrToCopy + sLineBreak;
end;
with DBGrid.DataSource.DataSet do begin
SavedBookMark := GetBookmark;
DisableControls;
for Idx := 0 to DBGrid.SelectedRows.Count -1 do begin
GotoBookMark(DBGrid.SelectedRows[Idx]);
StrToCopy := StrToCopy +DBGrid.Columns[0].Field.AsString;
for IdxCol := 1 to DBGrid.Columns.Count -1 do
StrToCopy := Format('%s'#9'%s', [StrToCopy, DBGrid.Columns[IdxCol].Field.AsString]);
StrToCopy := StrToCopy + sLineBreak;
end;
ClipBoard.Clear;
ClipBoard.SetTextBuf(PChar(StrToCopy));
GotoBookMark(SavedBookMark);
FreeBookMark(SavedBookMark);
EnableControls;
end;
end;
Exemplo: Download do exemplo
0 comentários:
Postar um comentário