Est-il possible de copier une sélection de lignes à partir d'un TDBGrid dans Delphi 2007 dans le presse-papiers facilement?Copie de parties d'un tdbgrid dans le presse-papier?
2
A
Répondre
5
Cette méthode est de notre unité de bibliothèque interne ..
procedure BuildListFromDBGrid(DBGrid: TDBGrid; const FieldName: String; Strings :TStrings);
var
i: Integer;
begin
Strings.Clear();
with DBGrid do
begin
Strings.BeginUpdate(); // If assocated with a UI control (Listbox, etc), this will prevent any flickering
DataSource.DataSet.DisableControls();
try
for i := 0 to (SelectedRows.Count - 1) do
begin
Datasource.DataSet.GotoBookmark(Pointer(SelectedRows[i]));
Strings.Add(DataSource.DataSet.FieldByName(FieldName).AsString);
end;
finally
DataSource.DataSet.EnableControls();
Strings.EndUpdate();
end;
end;
end;
Pour obtenir la liste des éléments sélectionnés dans le presse-papiers, ajouter Clipbrd à votre clause uses et appeler la procédure ..
var
SelectedItems :TStringList;
begin
SelectedItems := TStringList.Create();
try
BuildListFromDBGrid(MyDBGrid, 'InvoiceID', SelectedItems);
Clipboard.AsText := SelectedItems.Text;
finally
SelectedItems.Free();
end;
end;
Bien sûr, vous pouvez modifier la méthode ci-dessus ou en créer une nouvelle qui ajoute directement les éléments sélectionnés dans le presse-papiers (ex, plusieurs champs, dans un format spécialisé, etc)
C'est pratique - merci! Mais n'obtient-il pas efficacement une «colonne» de la grille plutôt qu'une «rangée»? Quand j'ai regardé la question originale, j'ai décidé qu'il devrait avoir une sorte de moyen de stocker des paires nom/valeur dans le presse-papiers. – robsoft