Tema: GotoBookMark
Ver Mensaje Individual
  #6  
Antiguo 08-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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; // Crear lista
    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); // Guardar Bookmarks
        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]));
        // Aca obtenes los 'n' BookMarks de la Tabla
        tb.BookMark:= FLstBM[i];
        // A partir de aca haces lo que gustes...
        ShowMessage(tb.FieldByName('Name').AsString);
     end;
     FLstBM.Free;  // Liberar lista
  end;
end;

Saludos.

Última edición por ecfisa fecha: 08-09-2010 a las 20:57:17.
Responder Con Cita