Newsgroup: it.comp.lang.delphi
Titolo: DbCtrlGrid replacement?

Ciao a tutti,
devo visualizzare una serie di record (righe dell'offerta) ognuno dei
quali ha un dettaglio di n righe (lavorazioni della riga).
I record principali sono 2 o 3 campi da visualizzare uno sopra l'altro
(quindi non come la grid)
L'ideale sarebbe dbctrlgrid dentro al quale poter mettere una dbgrid,
ma purtroppo non è fattibile.
Esiste qualche alternativa?
Oppure: Qualche idea di come realizzare una visualizzazione del
genere?
Grazie,
Matteo

Questa cosa di certo la fa la tcxgrid dei developer express: 
www.devex.com
.
Solo che non e' gratis...
A.

> Questa cosa di certo la fa la tcxgrid dei developer express:
www.devex.com
.
Interessante questo sito, anche se non è quello di devexpress (http://
www.devexpress.com/
)
;)
Le cxgrid so cosa sono, ma non mi rendo conto di come possa essere
fatto.
So che si può innestare una grid all'interno di un'altra grid, ma
così
il record della tabella principale è visualizzato per colonna.
C'è qualche altra possibilità?
Matteo

 il record della tabella principale è visualizzato per colonna.
Credo di non aver capito bene il tuo problema.. :-(
A.

> Credo di non aver capito bene il tuo problema.. :-(
Provo a fare un disegno ;)
Immagina un documento creato da una tabella intestazione e una tabella
righe.
Quello che voglio fare è (ad esempio):
Intestazione_Titolo          : ....
Intestazione_Descrizione : ....
|Righe_Quantità | Righe_Prezzo | Righe_Totale|
--------------------------------------------------------------------
|       ...             |        xxx          |       yyy      |
--------------------------------------------------------------------
|       ...             |        xxx          |       yyy      |
--------------------------------------------------------------------
L'intestazione è una riga sopra l'altra, le righe sono una normale
grid.
Spero di esser stato più chiaro...
Matteo

 grid.
Semplicemente riposizioni dei controlli "bindati" ai campi tuo dataset 
master (cioè la testata) sul form a tuo piacere.
Mi spiego meglio: tu hai due dataset, il master (testata) ed il detail 
(righe di dettaglio): prendi il dataset master, doppio click sul 
componente, aggiungi i campi persistenti (se già non l'hai fatto) e 
trascini i campi della testata sul form. Posizioni i campi nel posto che 
più ti viene comodo.
Per quanto riguarda il detail ovviamente userai una dbgrid.
In questo modo usi delphi proprio come RAD.
-- 
morde
D5,D6,D7
QT 4.7.0 - MingW- QT Creator 2.1

e la seconda riga del master?
Il mio master ha n righe (in effetti avrei dovuto fare un esempio un
pochino diverso, scusate...)
è per questo che mi sarebbe piaciuto il DbCtrlGrid, per fare quello
che dici tu ma ripetuto per n record master.
Matteo

 che dici tu ma ripetuto per n record master.
Infatti.
Dunque, se il master ha n righe, puoi risolvere cosě:
dividi la logica del tuo programma in due tronconi: l'operazione di 
caricamento dati della testata, e quella delle righe a fronte della testata.
Con quale criterio riconosci il significato delle singole righe di 
testata? Dall'ordine in cui sono memorizzate?
Brrr che modo orrendo di memorizzare i dati..
ciao


 testata?
La logica è questa (tutte relazioni 1-n):
Testata
    |
Righe
    |
Lavorazioni_riga
La testata è fatta come hai descritto tu,
la parte righe - Lavorazioni_riga è quella oggetto della discussione.
Apro la form, inserisco i dati testata poi inizio ad aggiungere righe,
ad ognuna delle quali posso aggiungere n Lavorazioni_riga.
Matteo

 ad ognuna delle quali posso aggiungere n Lavorazioni_riga.
Quindi hai risolto?
Una nota a margine: probabilmente stai usando una base dati ereditata 
dai vecchi sistemi, dove la base dati era un file ad accesso 
sequenziale... oppure il programmatore non conosce il significato della 
parola database..
Non mi spiego come mai si utilizzano più record in sequenza per 
un'informazione che dovrebbe essere contenuta in una sola riga.
O, al limite, spalmata in più tabelle testata-detail a fronte comunque 
di un unico record di testata.


 di un unico record di testata.
Questa cosa non la capisco.
Immagina di avere una azienda che fa oggetti customizzati con
lavorazioni che possono variare di volta in volta.
Quando dovrai offrire un oggetto dovrai definirlo descrivendo le
lavorazioni e i relativi prezzi.
Quindi sul db le righe rappresentano l'oggetto da creare/vendere e le
lavorazioni_riga rappresentano le lavorazioni che dovrai eseguire per
creare l'oggetto.
Non mi sembra per nulla logico contenere tutte queste informazioni in
un solo record, anzi!
Matteo

 creare l'oggetto.
Molte righe in una tabella non devono rappresentare un oggetto!
Una riga, in un database, si riferisce ad un solo "oggetto": sennò la 
teoria relazionale va a farsi friggere.
Ti spiacerebbe incollare qui uno di questi esempi testata-righe?
Prima di proseguire, vorrei vedere come sono state aggregate le 
informazioni.
ciao


 informazioni.
mmmh, questo è difficile, ti metto alcuni dati di esempio:
TESTATA:
ID = 331
FK_CLIENTI = 8614
DATA_INSERIMENTO = 28/03/2011
FK_PAGAMENTO = 3
questa testata ha 2 righe:
RIGHE:
ID=369
FK_TESTATA = 331
CODICE_CLIENTE = cod1
DESCRIZIONE = descr1
NUMERO_RIGA = 1
------------------------------------------------------------
ID=384
FK_TESTATA = 331
CODICE_CLIENTE = cod2
DESCRIZIONE = descr2
NUMERO_RIGA = 2
Ti metto 2 lavorazioni di esempio della prima riga:
LAVORAZIONI_RIGA:
ID = 284
FK_RIGHE = 369
FK_LAVORAZIONI = 81
NUMERO_RIGA = 1
ORE_PREVENTIVATE = 10
GG_CONSEGNA = 10
COSTO = 1000
ID = 297
FK_RIGHE = 369
FK_LAVORAZIONI = 1
NUMERO_RIGA = 2
ORE_PREVENTIVATE = 20
GG_CONSEGNA = 5
COSTO = 700
Nella mia sintassi ogni tabella ha il suo ID e ogni foreign key è
definita : FK_<NOME TABELLA>
Spero si capisca...
Matteo

 Spero si capisca...
Dal tuo esempio interpreto che hai un master detail
testata->clienti
e uno
testata->lavorazioni
Dividi la gui in due tabsheet: il primo coi dati di testata e una dbgrid 
coi detail della testata, il secondo tabsheet, conterrà il detail delle 
righe (dbgrid).
