bonjour,
j'utilise une table firebird et composants UIB2.5 pour remplir un treeview
avec les champs
gl_p:n compte
niveau_p:niveau dans treeview
pere_p:le nom de pere dans le treeview
mais malheuresement tous les enregistrements se créer dans le niveau 1 de la treeview.
la fonction FindParent ne trouve pas le noeud pere
avec Qr1: TUIBDataSet;avec transaction :UIBTransaction1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 procedure TForm1.Button3Click(Sender: TObject); var niv_max,j:integer; Fparent,PNode,PNode2 : TTreeNode; begin dm.Qr1.SQL.Text :='select max(niveau_p) as ma from c_plan' ; dm.Qr1.open; if dm.Qr1.recordcount=0 then ShowMessage('aucun compte')else niv_max:=dm.Qr1.FieldValues['ma']; //showmessage('max est '+inttostr(niv_max)+''); dm.qr1.SQL.Text :='select * from c_plan' ; dm.qr1.open; dm.qr1.First; while not dm.qr1.Eof do begin if dm.qr1.FieldValues['niveau_p']=1 then begin PNode:=TreeView1.Items.Add(nil,''+dm.qr1.FieldValues['gl_p']+''); PNode.ImageIndex:=40; end; dm.qr1.Next; end; if niv_max>1 then begin for j:=2 to niv_max do begin dm.qr1.First; while not dm.qr1.Eof do begin if dm.qr1.FieldValues['niveau_p']=j then begin Fparent:=FindParent(TreeView1,trim(dm.qr1.FieldValues['pere_p'])); PNode:=TreeView1.Items.AddChild(Fparent,dm.qr1.FieldValues['gl_p']); PNode.ImageIndex:=46; end; dm.qr1.Next; end; end; end; end;
alors que avec la même fonction FindParent les enregistrements se créer bien avec des niveaux dans le treeview avec le code
fonction findparent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 PNode:=TreeView1.Items.Add(nil,'9'); PNode.ImageIndex:=40; PNode:=TreeView1.Items.Add(nil,'4'); PNode.ImageIndex:=40; PNode:=TreeView1.Items.Add(nil,'3'); PNode.ImageIndex:=40; Fparent:=FindParent(TreeView1,'9'); PNode:=TreeView1.Items.AddChild(Fparent,'455554');
j'ai pas compris ou se trouve le probleme UIB!?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function FindParent(ATree: TTreeView; const ACaption: string): TTreeNode; begin Result := ATree.Items.GetFirstNode(); while Assigned(Result) do begin if Result.Text = ACaption then Exit; Result := Result.GetNext(); end; end;
merci d'avance
Partager