2008-12-29 7 views

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)

+0

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

Questions connexes