Newsgroup: it.comp.lang.delphi
Titolo: TabControl con dbgrid

Dunque ho un Tabcontrol con 4 tabs al suo interno ho una dbgrid,la dbgrid è
collegata al datasource che a sua volta prende i dati dal
ClientDataset(salvo i dati in formato binario "cds") il mio problema è che
quando cambio tabs devo vedere dati diversi e devo avere l'oppurtunita di
inserire nuovi dati; esempio:Nel primo Tabs lo chiamo Amici ho 2
record(Tizio e caio),se mi sposto nel secondo Tabs che chiamo nemici,li non
devo vedere più tizio e caio,ma non devo vedere "niente ",poi volendo posso
inserire due record marcello e ronaldo;dunque se adesso mi risposto nel tabs
amici nella dbgrid vedrò tizio e caio se invece vado sul tabs nemici vedrò
marcello e ronaldo.Sperò di essere stato chiaro,altrimenti cerco di
spiegarmi meglio;sicuramente dovrò utlizzare gli eventi onchange onchanching
di TabControl,Ho fatto bene ad usare la Dbgrid?,o avete qualche soluzione
migliore.
Ciao a tutti.


Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)

"Marco Breveglieri" <ma...@NOSPAMabls.it> ha scritto nel messaggio
news:YrXMb.84635$VW.35...@news3.tin.it...

Ho un solo ClientDataset(con 10 campi),poi nel programmino ho la possibilità
di aggiungere altri tabs.

 possibilità di aggiungere altri tabs.
Non mi è molto chiaro allora qual è il criterio secondo il quale
vorresti visualizzare dati differenti a seconda della pagina scelta...si
tratta di un filtro, quindi?
Cioè, vuoi limitare le righe visualizzate in base a valori e applicare
la limitazione a seconda della pagina selezionata dal TabControl?
P.S.: attento a quotare...riporta solo le parti del messaggio precedente
a cui rispondi direttamente o che sono strettamente importanti.


 la limitazione a seconda della pagina selezionata dal TabControl?
Quando cambio tabs,voglio visualizzare dati diversi;se vuoi faccio qualche
esempio.

 qualche esempio.
Che vuoi visualizzare dati diversi č chiarissimo, ma non ho ancora
capito se questi dati provengono dalla stessa tabella che stai
esaminando (rappresentata dal ClientDataSet) oppure devono provenire da
un'altra tabella.
A scanso di equivoci, ti avevo comunque indicato entrambi i metodi. :-)



I dati provvengono dalla stessa tabella(rappresentata dal cliendataset).Mi
spiego meglio: tramite la proprietà FieldsDefs di Clientsdataset, mi sono
creato 10 campi,poi creo il dataset "create dataset",poi salvo come "file
Binary Mybase";Io devo lavorare solo su questo;dunque quando cambio tabs
devo visualizzare dati diversi(su quello ci siamo capiti).
Ciao

Binary Mybase";
Ho capito... te sei quello della rubrica con record su file.DAT, giusto ?
Se ho capito bene, tu hai come unica fonte dati il CDS (= ClientDataSet),e nel
momento in cui l'utente cambia il tab devi modificare la vista dei dati
presenti sulla griglia.
Seguendo la logica impeccabile di Marco, e riquotando il suo codice, ti
suggerisco di applicare un filtro in base al tab selezionato
==============================
procedure TMyForm.MyTabControlChange(Sender: TObject);
begin
  case MyTabControl.TabIndex of
    0: ClientDataset1.Filter := 'TipoRec=''Amici''';
    1: ClientDataset1.Filter := 'TipoRec=''Nemici''';
  end;
end;
==============================
Ciao,
-- 
Morde. 
(
mo...@despammed.com
)

 l'oppurtunita di inserire nuovi dati;
Usa un filtro sui dati. Ovviamente, i dati devono contenere informazioni
adeguate all'operazione di filtro.
Esempio:
procedure TForm1.TabControl1Change(Sender: TObject);
var ds: TClientDataSet;
begin
  ds := DbGrid1.DataSource.DataSet;
  case (Sender as TTabControl).TabIndex of
    0: ds.Filter := 'TipoContatto = ''Amico''';
    1: ds.Filter := 'TipoContatto = ''Nemico''';
    2: ds.Filter := 'TipoContatto LIKE ''%mico%'''; // amici e nemici
    3: ds.Filter := ''; // nessun filtro
  end;
  if ds.Filter <> '' then ds.Filtered := True;
end;
Nel tuo dataset (la tabella) avrai anche un campo TipoContatto che
dovra' essere  opportunamente valorizzato all'atto dell'inserimento di
nuovi record: se inserisci il nuovo record quando sei nella prima
etichetta il campo dovra' essere valorizzato come "Amico", etc.
Saluti
Paolo Arosio
PS per favore, metti uno spazio dopo i segni di interpunzione.
-- 
"La dimostrazione dell'esistenza di specie intelligenti nell'universo
 e' che non ci vengono a trovare" [Calvin & Hobbes, forse]

 presenti sulla griglia.
Scusate se sono un pò duro a capire,premetto che quei 2 Tabs(amici e
nemici)gli ho creati Io a design-time(tramite la proprieta Tabs di
TabControl)
nel mio programma l'utente ha la possibilità di aggiungere nuovi tabs,in
base a questo devo utlizzare sempre il filtro del clientdataset?.Poi una
domanda per morde
che mi ha postato questo codice:
procedure TMyForm.MyTabControlChange(Sender: TObject);
 begin
  case MyTabControl.TabIndex of
     0: ClientDataset1.Filter := 'TipoRec=''Amici''';
    1: ClientDataset1.Filter := 'TipoRec=''Nemici''';
   end;
end;
Che cos'è TipoRec?;
Ciao scusatemi se sono un oò duro :D;

Ciao scusatemi se sono un oň duro :D;
Marce'.. leggiti la risposta del mitico Paolo Arosio, in questo stesso
thread...
;-)
-- 
Morde. 
(
mo...@despammed.com
)

 Ciao scusatemi se sono un oò duro :D;
Più che altro, non si riesce a capire cosa vuoi ottenere di preciso,
quindi sbilanciarsi in lunghe spiegazioni può essere rischioso dato che
ti si potrebbe dare indicazioni che alla fine non ti servono e sulle
quali produci poi altre domande ancora.
Per lavorare bene, io ti suggerirei di seguire gli articoli di Cary
Jensen riguardo al ClientDataSet che trovi in questa pagina:
http://community.borland.com/soapbox/professionaldeveloper/
Leggili tutti, perchè sicuramente ci avrai a che fare e potrebbero
contenere la soluzione al tuo problema...
...qualsiasi esso sia. ;-)
Inoltre, prenditi un po' di tempo per approfondire le basi di Delphi con
qualche corso sparso qui e là (cerca su Google), altrimenti ad ogni
minimo problema sei fermo ed è maggiore il tempo sprecato a cercare di
formulare le domande sul NG di quello necessario alla risoluzione del
problema stesso.



Ok Paolo,vedrò di stare più attento le prossime volte,adesso provo a seguiri
il tuo consiglio per quanto riguarda il mio problema.
Saluti Marcello

 seguiri il tuo consiglio per quanto riguarda il mio problema.
Ripeto: 
http://wiki.news.nic.it/QuotarBene
Inoltre, la tua e' una risposta che non e' utile a nessuno: non a me,
non agli altri frequentatori, ma, soprattutto, non e' utile a te stesso,
perche' si tratta di rumore, e come tale fonte di irritazione.
Senza contare che "vedro' di stare attento le prossime volte" suona come
presa in giro, ma tant'e'.
f-up su it.cultura.cyberocieta (significa che eventuali risposte a
questo messaggio andranno su quel newsgroup, a meno che venga cambiata
_a mano_ la destinazione).
Saluti
Paolo Arosio

 >
Paolo ho provato il tuo esempio č mi da il seguente errore:'Incompatible
types: TClientdaset and TDataset'

 ha scritto nel messaggio
news:p99Nb.111900$_P.40...@news4.tin.it...

Ho provato il codice sopra,perň mi da il seguente errore:'Incompatible
types: TClientdaset and TDataset';poi ho l'opzione nel programma di creare
tabs a run-time..

ecco la soluzione:
procedure TAddress.TabControl1Change(Sender: TObject);
begin
   ds := DbGrid1.DataSource;
  case (Sender as TTabControl).TabIndex of
    0: Cd.Filter := 'Tipo_Contatto = ''Name''';
    1: Cd.Filter := 'Tipo_Contatto = ''Company''';
    2: Cd.Filter := 'Tipo_Contatto LIKE ''%nam%''';
    3: Cd.Filter := ''; // nessun filtro
  end;
  if Cd.Filter <> '' then Cd.Filtered := True;
procedure TAddress.CdBeforePost(DataSet: TDataSet);
begin
case TabControl1.TabIndex of
  0:
    Cd.FieldByName('Tipo_Contatto').AsString:='Name';
  1:
    Cd.FieldByName('Tipo_Contatto').AsString:='Company';
end;
Ciao