Autore Topic: Creazione componente: gb.gridbox  (Letto 137628 volte)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #45 il: 16 Aprile 2010, 23:02:47 »
Ciao Milio
Ho fatto un pò di prove,
Volevo provare "Grid.ComboBox" , ma non sò come caricare i dati..
Ho provato anche "ME.GridBox1.NewRecord()" mi crea la riga nuova però poi non la salva.
Non sarebbe meglio, in fase di inserimento, che ci fosse sempre una riga vuota sotto?
Penso comunque che queste cose ho le hai già fatte o sono in cantiere giusto? ;D

Non so proprio come funzioni poi il comonente? Cioè come si farà a importarlo poi in un progetto? :-[

Ciao, buon lavoro

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #46 il: 16 Aprile 2010, 23:17:44 »
he he... per importare il componente in un progetto dovresti importarti tutte le classi create, oppure devi crearti il pacchetto di installazione e installartelo, in modo da avere il componente nella toolbar di dell'ide di gambas... pero' e' ancora prematura quest'ultima opzione perche' il progetto non e' ancora stabile e in continuo cambiamento...
per quanto riguarda il NewRecord ti posto l'ultima versione con la possibilita' di salvare i record nuovi...
Grid.ComboBox si carica tramite GridBox.Columns[<colonna>].box.ListCombo che accetta come valore una Collection (sappi pero' che la proprieta' .box e' ancora una bozza e sicuramente la cambiero')
« Ultima modifica: 16 Aprile 2010, 23:23:21 da milio »

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #47 il: 16 Aprile 2010, 23:28:56 »
Ha, ho fatto anche in modo di poter inserire una nuova riga tra le righe... prova a premere F3 posizionandoti sulla griglia...
L'unica cosa e' che appena salvi (ovviamente) la riga creata prende l'ordine della query che viene passata per il caricamento dei dati in griglia...
E' in cantiere la possibilita' di creare un ordine (settando opportunamente anche la tabella dove verranno salvati i dati con un campo di 'riordino') in modo da mantenere le posizioni delle righe...

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #48 il: 17 Aprile 2010, 00:13:23 »
Nel gestionale che uso in ditta, ogni documento e' formato da minimo tre tabelle: una di testa, una di righe e una di riepilogo (o dati aggiuntivi).
Per quanto riguarda la parte delle righe, per l'ordine dato nel documento utilizza un campo denominato 'Riga' dove e' salvato un numero progressivo intero.
Quando vado ad inserire una riga tra le righe, ai record sottostanti vengono eseguiti degli Update per incrementare il numero di Riga... io questo lo volevo evitare mettendo un campo di riordino di tipo Float, all'inserimento di una riga andavo a dare il valore di riordino con una media tra i valori di riordino dei due record confinanti... che ne pensi, puo' essere una buona idea?

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #49 il: 17 Aprile 2010, 15:16:33 »
Non so, questo problema l'ho girato in molti modi anche quando mi avevo fatto il gestionale con access.
Secondo me la maniera più giusta per non creare confusione è proprio quella di spostare "fisicamente" i dati sotto:

Mettiamo che ho 10 righe, voglio inserire una riga tra la 6 e la 7
- creo in fondo una nuova riga (riga 11)
- copio tutti i dati di tutti i campi della 10 sulla 11
- della 9 sulla 10
- della 8 sulla 9
- della 7 sulla 8
- cancello i dati della 7 lasciando i campi pronti per inserimento dati.

in questa maniera puoi mantenere l'id crescente e anche il campo riga (naturalmente per questo campo quando lo sposti devi fare +1)
Caso mai ci ragioniamo ancora ;) questa è solo una soluzione

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #50 il: 17 Aprile 2010, 23:21:00 »
Quando vado ad inserire una riga tra le righe, ai record sottostanti vengono eseguiti degli Update per incrementare il numero di Riga... io questo lo volevo evitare mettendo un campo di riordino di tipo Float, all'inserimento di una riga andavo a dare il valore di riordino con una media tra i valori di riordino dei due record confinanti... che ne pensi, puo' essere una buona idea?
Scusate l'intromissione, ma, siccome la curiosità supera l'ignoranza, vorrei capire come funzionerebbe un "valore di riordino". Io ho sicuramente capito male, perchè, aggiungendo un ulteriore colonna di tipo  "progressivo di riordino", come può essere valido nel tempo, senza riordinare mai il contenuto della tabella?
:ciao:

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #51 il: 18 Aprile 2010, 16:15:30 »
..Adesso sono in tilt :)
Non ho capito bene la colonna di riordino..
Comunque l'esempio che ho fatto io funziona anche senza campo numeratore se si mette in ordine per id, viene creato un id nuovo e spostati tutti i record precedenti fino alla riga scelta. Per spostati intendo copiare il contenuto dal record precedente.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #52 il: 18 Aprile 2010, 18:39:35 »
..Adesso sono in tilt :)
Non ho capito bene la colonna di riordino..
Comunque l'esempio che ho fatto io funziona anche senza campo numeratore se si mette in ordine per id, viene creato un id nuovo e spostati tutti i record precedenti fino alla riga scelta. Per spostati intendo copiare il contenuto dal record precedente.
Mi dispiace avere creato confusione, ma mi riferivo alla proposta di milio:
Citazione
mettendo un campo di riordino di tipo Float, all'inserimento di una riga andavo a dare il valore di riordino con una media tra i valori di riordino dei due record confinanti
Non ho capito tale utilizzazione, nè come possa funzionare. Se posso capire il meccanismo, magari potrò essere in grado di darvi una mano ??? :)
:ciao:

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #53 il: 18 Aprile 2010, 21:26:41 »
scusami, io non avevo capito :D

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #54 il: 19 Aprile 2010, 01:07:30 »
la mia intenzione e' banalissima :)

Faro' ora un esempio che vedo io tutti i giorni sul posto di lavoro:

Documento bolletta.
E' composto da tre tabelle: BollaTesta, BollaRighe, BollaRif.
BolleTesta contiene i campi relativi al codice cliente, varie opzioni di bolla (se stampata, se fatturata, ecc...), numero bolla e IDBolla
BollaRighe contiene le righe di merce e quelle descrittive.
BollaRif contiene i riferimenti ai documenti di fatturazione e i movimenti generati dal controllo in magazzino.

Il nostro esempio cade sulla tabella BolleRighe
i campi cono i seguenti (ovviamente sono molti di piu', ma taglio corto :) ):
ID (Serial PrimaryKey) - IDBolla (Integer) - Riga (Float) - TipoRiga (Integer) - Codice (String) - Descrizione (String) - ecc... ecc....

Inserisco 3 record...
ID  IDBolla  Riga   TipoRiga   Codice   Descrizione
1   1        1      0          ABC      Tovaglia Colorata
2   1        2      0          ACB      Tovagliolo Colorato
3   1        3      0          CBA      Coprimacchia Colorato


Fin qui tutto bene... Nel frattempo si sono fatte altre 30 bolle da 5 righe l'una quindi sono state aggiunte 150 record e ci troveremo in questa situazione:
ID  IDBolla  Riga   TipoRiga   Codice   Descrizione
1   1        1      0          ABC      Tovaglia Colorata
2   1        2      0          ACB      Tovagliolo Colorato
3   1        3      0          CBA      Coprimacchia Colorato
...
...
149 31       1      0          ABC      Tovaglia Colorata
150 31       2      0          ACB      Tovagliolo Colorato
151 31       3      0          CBA      Coprimacchia Colorato
152 31       4      0          XCD      Tovaglia 150x150
153 31       5      0          ASA      Coprimacchia 100x100


Adesso mettiamo il caso che il cliente della prima bolla mi chiama e mi fa aggiungere della merce. Voglio anche far presente alla spedizione, con una riga descrittiva messa in evidenza sulla prima riga della bolla, che e' stata appunto aggiunta della merce... tu mi dirai "ma perche' la riga descrittiva non la metti per ultima e buonanotte al secchio?" e io ti rispondo "Perche' a quest'ora di notte, con mia moglie che mi da del malato di mente al solo accendere il pc a quest'ora, non mi veniva in mente un altro esempio valido per farti capire cosa intendo io per campo di riordino" :)

Aggiungo i nuovi record in aggiunta alla prima bolla:
ID  IDBolla  Riga   TipoRiga   Codice   Descrizione
154 1        0.5    1                   Il cliente vuole altra merce
155 1        4      0          ASA      Coprimacchia 100x100


Richiamando i dati nel report (e anche nella GridBox) con una query con ORDER BY Riga, avremo sempre l'ordine giusto dei record senza star li a fare UPDATE al Campo Riga per i record sottostanti o, peggio ancora, non avendo il campo riga per il riordino, a fare l'UPDATE al campo ID.

Spero di essermi spiegato bene... sono appena reduce da una cena di parenti, e il vino sta ancora in circolo  :P :P ;)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #55 il: 19 Aprile 2010, 09:49:47 »
@milio:
Citazione
Aggiungo i nuovi record in aggiunta alla prima bolla:
ID  IDBolla  Riga   TipoRiga   Codice   Descrizione
154 1        0.5    1                   Il cliente vuole altra merce
155 1        4      0          ASA      Coprimacchia 100x100

Richiamando i dati nel report (e anche nella GridBox) con una query con ORDER BY Riga, avremo sempre l'ordine giusto dei record senza star li a fare UPDATE al Campo Riga per i record sottostanti o, peggio ancora, non avendo il campo riga per il riordino, a fare l'UPDATE al campo ID.
Benissimo, però ciò comporta ogni volta un'indagine sul numero di riga da comporre per l'inserimento in tabella. O forse il caso che hai descritto nell'esempio è l'unico che si possa manifestare? Non hai poi bisogno di distinguere i due gruppi di richieste?
Sempre, prendendedo spunto dall'esempio, dopo l'aggiunta, non si capisce quale sia la merce richiesta la prima volta e quale sia invece quella aggiunta.
Io non ho esperienza nel tuo settore, ma se fosse d'aiuto una similie distinzione, la tua riga di attenzione con la nota "Il cliente vuole altra merce", potrebbe benissimo essere aggiunta nella sequenza naturale delle righe, colorata in maniera diversa od evidenziata con un colore di sfondo idoneo a farla risaltare,  e con un numero di riga che sia il primo del nuovo gruppo di righe. Risolveresti anche il problema dell'indagine sul  numero di riga da inserire, perchè il programma saprebbe riconoscere il numero da attribuire automaticamente, attraverso la lettura delle righe già esistenti per la bolla in questione.
Ciao.
:ciao:

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #56 il: 19 Aprile 2010, 10:25:24 »

Benissimo, però ciò comporta ogni volta un'indagine sul numero di riga da comporre per l'inserimento in tabella.

Certo me e' sicuramente più rapido che non andare a fare un update ad ogni riga successiva a quella inserita...

Non hai poi bisogno di distinguere i due gruppi di richieste?
Sempre, prendendedo spunto dall'esempio, dopo l'aggiunta, non si capisce quale sia la merce richiesta la prima volta e quale sia invece quella aggiunta.
Io non ho esperienza nel tuo settore, ma se fosse d'aiuto una similie distinzione, la tua riga di attenzione con la nota "Il cliente vuole altra merce", potrebbe benissimo essere aggiunta nella sequenza naturale delle righe, colorata in maniera diversa od evidenziata con un colore di sfondo idoneo a farla risaltare,  e con un numero di riga che sia il primo del nuovo gruppo di righe. Risolveresti anche il problema dell'indagine sul  numero di riga da inserire, perchè il programma saprebbe riconoscere il numero da attribuire automaticamente, attraverso la lettura delle righe già esistenti per la bolla in questione.
Ciao.

Se hai letto tutto il mio post, quello riportato sopra era solo un esempio di come poter mantenere un ordine delle righe inserite successivamente alla creazione del documento. E' logico che io non vado di certo a scrivere alle mie colleghe di magazzino, sulla stessa bolla, che il cliente ha bisogno di nuova merce, ma creerò una nuova bolletta...

Potremmo fare anche un esempio più logico e mirato, ma la sostanza non cambierebbe... ;)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #57 il: 19 Aprile 2010, 22:15:11 »
Avevo fatto la stessa cosa con access, poi ho cambiato, non ricordo il perchè..
Può porsi il problema se devi inserire più record? tipo più di 10?
Mi sembra molto più pulito un risultato del genere:
ID   IDBolla  Riga   TipoRiga   Codice   Descrizione
1    1        1      1                   Il cliente vuole altra merce
2    1        2      0          ABC      Tovaglia Colorata
3    1        3      0          ACB      Tovagliolo Colorato
154 1        4      0          CBA      Coprimacchia Colorato
155 1        5      0          ASA      Coprimacchia 100x100

Puoi ordinare sia per id che per riga, e non sei obbligato ad avere il campo riga

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #58 il: 20 Aprile 2010, 13:36:38 »
Può porsi il problema se devi inserire più record? tipo più di 10?

No perché sarebbe sempre la media tra i valori confinanti alla riga inserita

Mi sembra molto più pulito un risultato del genere:
ID   IDBolla  Riga   TipoRiga   Codice   Descrizione
1    1        1      1                   Il cliente vuole altra merce
2    1        2      0          ABC      Tovaglia Colorata
3    1        3      0          ACB      Tovagliolo Colorato
154 1        4      0          CBA      Coprimacchia Colorato
155 1        5      0          ASA      Coprimacchia 100x100

Puoi ordinare sia per id che per riga, e non sei obbligato ad avere il campo riga

Ho fatto una cosa (anche perché è vero che avere un numero intero al posto di un float è piu' elegante):
ho inserito una nuova proprietà alla GridBox che si chiama .UpdateReording dove è TRUE se si utilizza il metodo di riordino con numeri interi, FALSE se si utilizza il metodo con numeri di tipo Float... a voi la scelta :)
Per quanto riguarda fare il riordino sul campo id, lo escludo gia' da subito anche perchè tu immagina l'esempio della bolla che avevo fatto qualche post sopra, e come succede quotidianamente dove lavoro io, vengano fatte 200 e piu' bolle al giorno con una media di (presa in questo momento sul db del server della ditta) 1500 record...
Tu pensa andare a fare una variazione ad una bolla che e' stata fatta 3-4 giorni prima! Dovresti fare un update di 4500 record per inserirne uno, quando invece hai un campo apposito con al massimo 5-10 update da fare....

Invio sorgenti per test ;)

Ps. c'e' un form in piu' del solito che si chiama frmDati. Non vi funzionera' perche' l'ho usato con un collegamento a db mysql qui in ditta, e serve a visualizzare i dati di guida dei camion durante le consegne... volevo solo far presente che con poche righe di codice e in pochissimo tempo (meno di 5 min) si puo' ottenere un risultato come nell'immagine allegata...
« Ultima modifica: 20 Aprile 2010, 13:42:23 da milio »

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Creazione componente: gb.gridbox
« Risposta #59 il: 20 Aprile 2010, 23:16:11 »
Ciao Milio,
Citazione
Tu pensa andare a fare una variazione ad una bolla che e' stata fatta 3-4 giorni prima! Dovresti fare un update di 4500 record per inserirne uno, quando invece hai un campo apposito con al massimo 5-10 update da fare....
Nel sistema che ho detto io non vado a toccare i record delle altre bolle, ma solo della bolla che inserisco il nuovo record.. , ma penso di non capire il tuo sistema ???.
Comunque secondo me va benissimo il modo che hai utilizzato :D

Citazione
..poche righe di codice e in pochissimo tempo (meno di 5 min)
questo vale solo per te :P io devo fare tutto il tragitto dei camion a piedi per arrivarci  :D :D :D
Ciao Milio, guardo il nuovo griedit