Bonjour
J'ai un problème avec un Treeview implanté dans une page web (4 niveaux avec la racine): impossible de gérer les noeuds sélectionnés, d'autre part, il a un comportement que je ne comprends pas : il accepte la sélection des noeuds de niveaux 3, mais sur les noeuds niveau 1 et 2, il sélectionne uniquement le premier noeud du niveau (?!!).
Mon Treeview est implanté avec ce code :
Il est initialisé sur l'évènement Page_Load de la page (j'ai lu dans un post que c'était la meilleure solution) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <asp:TreeView ID="activ" runat="server" Style="z-index: 100; left: 0px; position: absolute; top: -6px" ExpandDepth="1" OnSelectedNodeChanged="activ_SelectedNodeChanged" ImageSet="Arrows" MaxDataBindDepth="2"> <LevelStyles> <asp:TreeNodeStyle Font-Size="Large" Font-Underline="False" /> </LevelStyles> <SelectedNodeStyle Font-Bold="True" ForeColor="#5555DD" Font-Underline="True" HorizontalPadding="0px" VerticalPadding="0px" /> <ParentNodeStyle Font-Bold="False" /> <HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" /> <NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" /> </asp:TreeView>
Enfin, j'ai codé la procédure SelectedNodeChanged comme suit (juste le remplissage de zones de texte avec les données du noeud sélectionné :
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { TreeNode noeudRacine = new TreeNode("Activités", "0"); activ.Nodes.Add(noeudRacine); //noeudRacine.NavigateUrl = "javascript:void(0);"; OleDbConnection cnx = new OleDbConnection(); cnx.ConnectionString = ads_filiere.ConnectionString; OleDbCommand cmd = new OleDbCommand(); cmd.Connection = cnx; cnx.Open(); cmd.CommandText = "select filiere from filiere"; OleDbDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { TreeNode noeudFiliere = new TreeNode(dr.GetString(dr.GetOrdinal("filiere")), "1"); noeudRacine.ChildNodes.Add(noeudFiliere); //message += noeudFiliere.NavigateUrl.ToString() + "<br>"; //noeudFiliere.NavigateUrl = "javascript:void(0);" OleDbConnection cnx2 = new OleDbConnection(); cnx2.ConnectionString = ads_filiere.ConnectionString; OleDbCommand cmd2 = new OleDbCommand(); cmd2.Connection = cnx2; cnx2.Open(); cmd2.CommandText = "select branche from branche where filiere='" + dr.GetString(dr.GetOrdinal("filiere")) + "'"; OleDbDataReader dr2 = cmd2.ExecuteReader(); while (dr2.Read()) { if (!dr2.IsDBNull(0) && dr2.GetString(0).Trim() != "") { TreeNode noeudBranche = new TreeNode(dr2.GetString(0), "2"); noeudFiliere.ChildNodes.Add(noeudBranche); //message += noeudBranche.NavigateUrl.ToString() + "<br>"; //noeudBranche.NavigateUrl = "javascript:void(0);"; OleDbConnection cnx3 = new OleDbConnection(); cnx3.ConnectionString = ads_filiere.ConnectionString; OleDbCommand cmd3 = new OleDbCommand(); cmd3.Connection = cnx3; cnx3.Open(); cmd3.CommandText = "select spécialité from spécialité where branche='" + dr2.GetString(0) + "'"; OleDbDataReader dr3 = cmd3.ExecuteReader(); while (dr3.Read()) { if (!dr3.IsDBNull(0) && dr3.GetString(0).Trim() != "") { TreeNode noeudSpécialité = new TreeNode(dr3.GetString(0), "3"); //noeudSpécialité.NavigateUrl = "javascript:void(0);"; noeudBranche.ChildNodes.Add(noeudSpécialité); } } dr3.Close(); cnx3.Close(); } } dr2.Close(); cnx2.Close(); } dr.Close(); cnx.Close(); } }
Question : Pourquoi le treeview ne fonctionne qu'avec les noeuds de niveau 3 ? et pas avec tous ? Je n'ai pas trouvé de propriété qui paramètre celà, je n'ai pas trouvé de réponse dans le forum non plus, c'est pour çà que je demande si quelqu'un ne verrait pas une solution à mon problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 protected void activ_SelectedNodeChanged(object sender, EventArgs e) { Response.Write(activ.SelectedNode.Text); txtselectedvalue.Text = activ.SelectedNode.Text; txtselectedvalue2.Text = activ.SelectedNode.Text; txtpath.Text = activ.SelectedNode.ValuePath; txtniveau.Text = activ.SelectedNode.Depth.ToString(); }
Merci
Partager