PDA

View Full Version : [VB6] HierarchicalFlexGrid: massimo nr.di righe ?


Spike79
03-04-2009, 15:59
Ciao, ho creato un'applicazione che fa uso di alcune FlexGrid, vorrei sapere qual'è il numero massimo di righe visibili, e in caso ci sia, come suggerite eventualmente di fare per poterle visualizzare "a blocchi" con magari un paio di tasti "avanti e indietro".
Il DB a cui sono agganciato è un semplice Access2k.

Grazie per ogni suggerimento.

Ciao

MarcoGG
03-04-2009, 17:53
Indipendentemente dal fatto che ci sia o meno un limite, avere una griglia anche solo con 1000 righe al colpo non è un granchè come leggibilità.
Molto meglio implementare un paging, che nel caso dell'ADODB Recordset, puoi gestire usando le proprietà .CacheSize e .PageSize.

Spike79
04-04-2009, 11:04
Indipendentemente dal fatto che ci sia o meno un limite, avere una griglia anche solo con 1000 righe al colpo non è un granchè come leggibilità.
Molto meglio implementare un paging, che nel caso dell'ADODB Recordset, puoi gestire usando le proprietà .CacheSize e .PageSize.

In effetti si, anche se conto di non avere più di un paio di migliaia di righe in totale, una paginazione non sarebbe male....mi potresti fare o linkare degli esempi di questa funzionalità ? Sinceramente non l'ho mai utilizzata....

(per popolare la flex uso un classico ADODB.Recordset settandolo come suo DataSource)

MarcoGG
05-04-2009, 15:19
Esempi validi sul web ce ne saranno, ma ricordo di aver fatto fatica anch'io a trovare qualcosa e alla fine mi ero arrangiato di sana pianta.
Non è una cosa immediata. A grandi linee :

1. Carichi il Recordset principale, che contiene tutte le righe desiderate. La procedura è quella solita, ma si faccia attenzione che alcune proprietà siano quelle "giuste", altrimenti non funzionerà :

...
RS.CacheSize = 100
RS.PageSize = 100
RS.CursorLocation = adUseClient
RS.CursorType = adOpenStatic
RS.LockType = adLockReadOnly
...

2. Si crea un secondo Recordset di appoggio (RecordSetPaginaN), senza connessione, che riceve di volta in volta solo i record della pagina desiderata...

3. Si esegue il binding della HFlexGrid con :
Set MSHFlexGrid1.Recordset = RecordSetPaginaN

Non è una gran spiegazione, ma la versione "full" implicherebbe il copia/incolla di una cinquantina di righe di codice direttamente da un mio progetto... e sai com'è... :D

Spike79
05-04-2009, 16:42
Intanto grazie mille, sei stato più che gentile già ad incollarmi queste righe.
Cercherò qualcosa sulle proprietà pagesize e cachesize che mi sembrano le "indiziate principali" in questa indagine, di certo San Guuugle mi farà una grazia (spero).

Spike79
06-04-2009, 15:43
Oggi ho provato a fare come mi hai detto, però la parte che non riesco a far funzionare è l'assegnare XX righe recuperate dal RS "ufficiale" al recordset disconnesso...

MarcoGG
07-04-2009, 08:25
Oggi ho provato a fare come mi hai detto, però la parte che non riesco a far funzionare è l'assegnare XX righe recuperate dal RS "ufficiale" al recordset disconnesso...

1. NON devi chiudere la connessione usata per popolare il RS principale.

2. Esegui in un ciclo la copia record per record nel RecordSet-Pagina, facendo attenzione che la condizione di uscita dal ciclo stesso non sia solo la classica RS.EOF, ma anche ( OR ) RS.AbsolutePage <> numeroPaginaSelezionato... ;)

Spike79
07-04-2009, 08:27
Perfect!
Proverò così, grazie mille ancora!