Bonjour,
J'ai un problème avec une fonction récursive pour cocher/décocher en cascade les cases à cocher d'un composant TcxDBTreeList.
Quand on coche une case, toutes les cases descendantes sont cochées sauf la dernière je ne comprends pas pourquoi (dernier noeud fils), voici le code :
et l'appel à cette procédure dans la procédure "EditValueChanged" du composant TcxDBTreeList :
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 procedure CheckTreeNode(Checked: integer; Col: TcxTreeListColumn; Node: TcxTreeListNode); var i: Integer; v: Boolean; begin v := False; Col.EditValue := Checked; for i := 0 to Node.Count - 1 do begin { Obligatoire pour accéder aux items "non visibles" de l'arbre (branche non dépliée de l'arbre)... } v := Node.Items[i].IsVisible; if not v then Node.Expand(False); { ...Obligatoire pour accéder aux items "non visibles" de l'arbre (branche non dépliée de l'arbre) } Col.TreeList.FocusedNode := Node.Items[i]; CheckTreeNode(Checked, Col, Node.Items[i]); end; { Obligatoire pour accéder aux items "non visibles" de l'arbre (branche non dépliée de l'arbre) } if not v then Node.Collapse(False); end;
Si quelqu'un a une idée, merci beaucoup, ou bien une solution alternative pour pouvoir cocher mes cases comme je le souhaite... merci beaucoup.
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 if UpdatingTreeCheckBoxes then Exit; UpdatingTreeCheckBoxes := True; try AColumn.TreeList.BeginUpdate; { Mémorisation de l'élément sélectionné } MemNode := AColumn.TreeList.FocusedNode; try CheckTreeNode(AColumn.EditValue xor 1, AColumn, AColumn.TreeList.FocusedNode); finally { Récupération de l'élément sélectionné par l'utilisateur } AColumn.TreeList.FocusedNode := MemNode; AColumn.TreeList.EndUpdate; { Les modifications n'ont pas encore été "sauvées" dans la base de données tant que ApplyUpdates() n'a pas été exécuté (=> on peut gérer l'annulation des modifications dans l'arbre) } end; finally UpdatingTreeCheckBoxes := False; end;
Isa
Partager