Per prima cosa possiamo creare un bottone, che una volta schiacciato si assicurerà di effettuare l'operazione di duplica. Per permettere questa operazione in multiriga è necessario impostare la proprietà "MultiSelect" del bottone a "Yes".
Dopodichè basterà inserire questa logica (ne esistono comunque diverse varianti) nel metodo "clicked" del bottone stesso:
DataSource dataSourceLocale;
DataSource dataSourceNuovo;
MultiSelectionHelper selection = MultiSelectionHelper::construct();
super();
selection.parmDatasource(DataSource_ds);
dataSourceLocale = selection.getFirst();
while (DSLunchOrderslocal.RecId != 0)
{
dataSourceNuovo.field1 = dataSourceLocale.field1;
dataSourceNuovo.field2 = dataSourceLocale.field2;
....
dataSourceNuovo.insert();
dataSourceLocale = selection.getNext();
}
DataSource_ds.executeQuery();
Come si vede dal codice basta dichiarare due buffer dello stesso tipo della tabella che è impostata nella griglia, e un oggetto "MultiSelectionHelper" che ci aiuterà a scorrere le righe selezionate.
Il primo buffer (dataSourceLocale) serve per raccogliere i record che mano a mano vogliamo copiare, ovvero ogni singola riga, e il secondo serve per l'inserimento nel database.
Dopo aver inizializzato l'oggetto "MultiSelectionHelper", lo si parametrizza con i dati selezionati dal form e lo si inizia a scorrere partendo dal primo record con "getFirst()" parametrizzando il primo buffer. All'interno del ciclo si parametrizza il secondo buffer con gli stessi valori del primo che viene via via ciclato con "getNext()".
Infine per visualizzare le nuove righe nel form basta effettuare il metodo "executeQuery()" del datasource dello stesso.