Hola BPL.
Como no me gusta dejar las cosas a medias, te implemento un ejemplo.
Los componentes: 2 TDBGrid, 2 TButton, 1 TTable (Country/DBDEMOS), 1 ClientDataSet.
Para el ejemplo en ambos DBGrids esta dgMultiSelect = True.
Un botón copia al ClientDataSet y el otro obtiene todas las posiciones en la tabla de los datos copiados:
Código Delphi
[-]
type
TForm1 = class(TForm)
tb: TTable;
dsCtry: TDataSource;
ClientDataSet: TClientDataSet;
dsCDS: TDataSource;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
CDSName: TStringField;
CDSCapital: TStringField;
CDSContinent: TStringField;
CDSArea: TFloatField;
CDSPopulation: TFloatField;
btnPasar: TButton;
btnObtener: TButton;
procedure FormCreate(Sender: TObject);
procedure btnPasarClick(Sender: TObject);
procedure btnObtenerClick(Sender: TObject);
private
FLstBM: TStrings;
public
end;
var
Form1: TForm1;
implementation {$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet.CreateDataSet;
ClientDataSet.Open;
end;
procedure TForm1.btnPasarClick(Sender: TObject);
var
i: Integer;
begin
if DBGrid1.SelectedRows.Count > 0 then
begin
FLstBM:= TStringList.Create; with DBGrid1.DataSource.DataSet do
for i:= 0 to DBGrid1.SelectedRows.Count -1 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
FLstBM.Add(tb.Bookmark); with ClientDataSet do
begin
Append;
CDSName.Value:= tb.FieldByName('Name').AsString;
CDSCapital.Value:= tb.FieldByName('Capital').AsString;
CDSContinent.Value:= tb.FieldByName('Continent').AsString;
CDSArea.Value:= tb.FieldByName('Area').AsFloat;
CDSPopulation.Value:= tb.FieldByname('Population').AsFloat;
end;
end;
end;
end;
procedure TForm1.btnObtenerClick(Sender: TObject);
var
i: Integer;
begin
if DBGrid2.SelectedRows.Count > 0 then
begin
with DBGrid2.DataSource.DataSet do
for i:= 0 to DBGrid2.SelectedRows.Count -1 do
begin
GotoBookmark(pointer(DBGrid2.SelectedRows.Items[i]));
tb.BookMark:= FLstBM[i];
ShowMessage(tb.FieldByName('Name').AsString);
end;
FLstBM.Free; end;
end;
Saludos.
