Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: schumi - Maggio 07, 2015, 10:03:35 am

Titolo: Selezionare record su DBGrid con checkbox
Inserito da: schumi - Maggio 07, 2015, 10:03:35 am
Buongiorno,
richiesta da novellino che proviene da VFP... ::)
popolo una griglia con dati prelevati da più tabelle, vorrei poter selezionare quali righe mandare in stampa con lazreport.
seguendo questo esempio http://wiki.lazarus.freepascal.org/Grids_Reference_Page#Selecting_Records_in_a_DBGrid_using_checkboxes
riesco a selezionare i record, come posso ora caricare solo i record selezionati in un datasource per la stampa?
ero arrivato qui...
for icnt := 0 to RecList.Count -1 do begin
  dbgrid1.DataSource.DataSet.GotoBookmark(Pointer(reclist[icnt]));
  if RecList.CurrentRowSelected then begin
    // qui vorrei copiare il record in un altro datasource per stampa ???
  end;
end;

oppure sto sbagliando approccio... ??? ??? ??? ???

grazie.
Titolo: Re:Selezionare record su DBGrid con checkbox
Inserito da: Antonello - Maggio 07, 2015, 12:12:45 pm
una memory table? (TMemDataset)
Titolo: Re:Selezionare record su DBGrid con checkbox
Inserito da: nomorelogic - Maggio 07, 2015, 06:13:32 pm
io solitamente aggiro il problema in questo modo:
1) preparo una SELECT che mi rappresenta tutti i dati che mi servono
2) nella select aggiungo un campo costante chiamato "Selezione" (la checkbox), esempio:
Codice: [Seleziona]
select 0 as "Selezione", CAMPO1 as "Codice", CAMPO2 as "Descrizione", ... 
2) apro la TSqlQuery e tramite un datasource il tutto finisce in una TDbGrid
3) lascio all'utente il compito di selezionare i record tramite il checkbox "Selezione" nella TDBGrid
4) in fase di stampa uso la TSqlQuery già collegata alla griglia e filtro per i record selezionati dall'utente

così ti eviti il I° ciclo per popolare la griglia ed il II° ciclo per popolare il dataset ;)
Titolo: Re:Selezionare record su DBGrid con checkbox
Inserito da: schumi - Maggio 07, 2015, 07:17:45 pm
Citazione
io solitamente aggiro il problema in questo modo:
1) preparo una SELECT che mi rappresenta tutti i dati che mi servono
2) nella select aggiungo un campo costante chiamato "Selezione" (la checkbox), esempio:
Codice: [Seleziona]
select 0 as "Selezione", CAMPO1 as "Codice", CAMPO2 as "Descrizione", ...
2) apro la TSqlQuery e tramite un datasource il tutto finisce in una TDbGrid
3) lascio all'utente il compito di selezionare i record tramite il checkbox "Selezione" nella TDBGrid
4) in fase di stampa uso la TSqlQuery già collegata alla griglia e filtro per i record selezionati dall'utente

così ti eviti il I° ciclo per popolare la griglia ed il II° ciclo per popolare il dataset ;)

era quello che volevo fare inizialmente (e che ho sempre fatto in foxpro), però non mi permetteva di modificare il checkbox, non so se dipenda dalle ZeosLib...riprovo e posto quello che esce.

grazie
Titolo: Re:Selezionare record su DBGrid con checkbox
Inserito da: nomorelogic - Maggio 07, 2015, 08:03:42 pm
controlla se il datasource ha AutoEdit impostato a True
Titolo: Re:Selezionare record su DBGrid con checkbox
Inserito da: schumi - Maggio 11, 2015, 03:41:37 pm
Confermo che un campo virtuale creato su TZquery non si può modificare su una DBGrid.
oppure mi sfugge qualcosa, in rete non ho trovato niente

select 1 as stp, * from nometabella

visualizza correttamente il dato ma non permette di modificarlo.


Titolo: Re:Selezionare record su DBGrid con checkbox
Inserito da: schumi - Maggio 12, 2015, 01:50:28 pm
Citazione
una memory table? (TMemDataset)

ho optato per un TBufDataSet perché pare che il Tmem vada in disuso...

grazie per il suggerimento ;)