develomagaly
Messages postés46Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention 3 mai 2006
-
19 oct. 2005 à 10:34
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 2009
-
20 oct. 2005 à 10:05
Bonjour,
J'utilise un treeview que je charge a l'aide de ma base de donnée
j'utilise une procedure chargerTreeview, chargerSousGroupe et chargerSousSousGroupe.
La procedure chargerTreeview charge les noeuds principales (sa marche ! ). Dans cette pprocedure je fais appel à la procédure chargerSousGroupe. Elle charge les noeuds enfants ( sa marche ! ) Et dans cette procedure je fais une procedure ChargerSousSousGroupe qui doit charger les noeuds enfants des noeuds enfants ( tout le monde suit?).
On doit obtenir :
DONNEES FOYERS
NOM DU FOYER X
PERIODE A
PERIODE B
SITUATION
En suite dans le procedure chargerSousSousGroupe , on fait appel a la procedure chargerSousSousGroupe ( à elle même quoi ! )
Le problème est que quand je suis arriver à la procedure chargerSousSousGroupe il faudrait que je puisse selectionner le noeuds enfants ( sa sa marche po car il me selectionne le noeuds principale
Code :
{ Chargement du treevieuw avec la base de données }
procedure TCdrGroupe.ChargerTreeview(); var NbLig,j: integer ;
begin
// il faut charger le treeview en fonction des données de la base de données
DataSet.Active:= false ;
DataSet.CommandText:='SELECT DISTINCT grp_NomGroupe FROM groupe WHERE grp_NoPlan =''ALL'' OR grp_NoPlan='''+ TypeSim + ''' or grp_NoPlan = ''' + TypeGroupe + ''' ORDER BY grp_ordre ;';
DataSet.Active:=true;
DataSet.First;
NbLig:=DataSet.RecordCount;
for j: =1 to NbLig do begin
if (FrmSimulation.TreeView.Items.Count= 0) then
begin with FrmSimulation.TreeView.Items.AddFirst (nil,DataSet.FieldByName ('grp_NomGroupe').AsString) do
selected : =true ;
ChargerSousGroupe(DataSet.FieldByName('grp_NomGroupe').AsString);
end else begin with FrmSimulation.TreeView.Items.Add (FrmSimulation.TreeView.Selected,DataSet.FieldByName ('grp_NomGroupe').AsString) do
selected := true ;
ChargerSousGroupe(DataSet.FieldByName('grp_NomGroupe').AsString);
end;
DataSet.Next;
end
end;
{Chargement des sous groupe en fonction du NomGroupe donner en paramètre}
procedure TCdrGroupe.ChargerSousGroupe(NomGroupe:string);
var NbLig,i:integer ;
begin //On va chercher les sous Groupes par rapport a plusieurs critères :
// - le NoPlan ou on se trouve IBA, IBI, SBA, SBI
// - le groupe qu'il faut renseigner ( en paramètre )
datasetsg.Active: =false; datasetsg.CommandText:'SELECT sgrp_NomSousGroupe,niveau FROM sousgroupe g WHERE sgrp_NomGroupe '''+ NomGroupe + ''' AND sgrp_NoPlan IN (''ALL'', '''+ typesim+ ''',''' +typeGroupe + ''') ORDER BY sgrp_ordre;';
datasetsg.Active:=true ;
datasetsg.First ;
nblig:=datasetsg.RecordCount;
for i: =1 to nblig do begin with FrmSimulation.TreeView.Items.AddChild (FrmSimulation.TreeView.Selected,DataSetsg.FieldByName('sgrp_NomSousGroupe').AsString) do
if DataSetsg.FieldByName('niveau').AsInteger > 0 then ChergerSousSousGroupe(DataSetsg.FieldByName('sgrp_NomSousGroupe').AsString);
datasetsg.Next;
end; nblig:= 0;
end;
procedure TCdrGroupe.ChergerSousSousGroupe(NomSousGroupe:string);
var Nblig,i:integer;
begin DataSetSgrp.Active: =false; DataSetSgrp.CommandText:'SELECT sgrp_NomSousGroupe,niveau FROM sousgroupe WHERE sgrp_NomGroupe'''+nomSousGroupe+''';';
DataSetSgrp.Active:=true ;
Nblig:=datasetsgrp.RecordCount;
for i: =1 to nblig do begin
with FrmSimulation.TreeView.Items.AddChild(FrmSimulation.TreeView.Selected,DataSetsgrp.FieldByName('sgrp_NomSousGroupe').AsString)do
// if DataSetSgrp.FieldByName('niveau').AsInteger>0 then ChergerSousSousGroupe(DataSetsgrp.FieldByName('sgrp_NomSousGroupe').AsString);
datasetsgrp.Next;
end;
end;
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 20 oct. 2005 à 10:05
Je me suis pas trop penché sur ton code, mais si j'étais toi je
passerais le noeud auquel tu veux ajouter les enfants comme un
paramètre de tes procédures.
comme ça tu ne te base pas sur la selection, mais bien sur un noeud
particulier pour les ajouter. pas de problème de selection qui change
sans que tu saches pk. (une cause possible de ton problème)
Sinon, pour une question de propreté et de modularité (et donc de
facilité de tests), j'essairais de passer non pas le paramètre de ta
requete, mais le resultat. Dans ton cas, je sais pas si ça vaut la
peine. mais penses-y la prochaine fois. Il est souvent plus sage de
séparer les procédures d'affichage et de manipulation de donnée.
En espérant t'avoir donné une voie utile,
Loda
PS: sinon je connais pas la partie BD, mais es-tu sur que l'appel de
"DataSetSgrp.Active:= XXX;" au milieu de ta boucle for ne dérange pas?