Bonjour,

Je connait le principe de fonctionnment de l'échange de données entre 2 listbox au moyen de deux flêches.
J'ai fait un petit exemple avec un updatepanel :

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
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
 
     <ContentTemplate>
        <asp:ListBox ID="ListBox1" runat="server" SelectionMode="Multiple" >
        <asp:ListItem Text="val1" Value="val1"></asp:ListItem>
        <asp:ListItem Text="val2" Value="val2"></asp:ListItem>
        <asp:ListItem Text="val3" Value="val3"></asp:ListItem>
        <asp:ListItem Text="val4" Value="val4"></asp:ListItem>
        </asp:ListBox>
   </ContentTemplate>
   <Triggers><asp:AsyncPostBackTrigger ControlID="TransfertGauche"/></Triggers>
   <Triggers><asp:AsyncPostBackTrigger ControlID="TransfertDroit"/></Triggers>
   </asp:UpdatePanel>
 
<asp:ImageButton ID="TransfertGauche" runat="server" 
          ImageUrl="/Images_Projet/Images/TransfertGauche.png" width="20" height="20" onclick="TransfertGauche_Click" 
          /> <br /><br />
      <asp:ImageButton ID="TransfertDroit" runat="server" 
          ImageUrl="/Images_Projet/Images/TransfertDroit.png" width="20" height="20" onclick="TransfertDroit_Click" 
          />
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
           <ContentTemplate>
           <asp:ListBox ID="ListBox2" runat="server" SelectionMode="Multiple" ></asp:ListBox>
          </ContentTemplate>
          <Triggers><asp:AsyncPostBackTrigger ControlID="TransfertGauche"/></Triggers>
          <Triggers><asp:AsyncPostBackTrigger ControlID="TransfertDroit"/></Triggers>
       </asp:UpdatePanel>
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
protected void TransfertGauche_Click(object sender, ImageClickEventArgs e)
        {
 
            if (!ListBox2.GetSelectedIndices().Length.Equals(0))
            {
                ListBox1.Items.Add(ListBox2.SelectedItem);
                ListBox2.Items.Remove(ListBox2.SelectedItem);
 
            }
        }
 
        protected void TransfertDroit_Click(object sender, ImageClickEventArgs e)
        {
 
                if (!ListBox1.GetSelectedIndices().Length.Equals(0))
                {
                    ListBox2.Items.Add(ListBox1.SelectedItem);
                    ListBox1.Items.Remove(ListBox1.SelectedItem);
                }
 
        }
Ce principe marche bien pour les listbox.
Maintenant, je voudrais réaliser la même chose en remplacant les deux listbox par deux treeview.

Mes treeview sont définis comme cela :


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
    <asp:UpdatePanel ID="UpdatePanel5" runat="server">
         <ContentTemplate> 
 
   <asp:TreeView ID="ToutesReferencesNominatives" runat="server" ImageSet="Simple" 
           NodeIndent="10">
        <ParentNodeStyle Font-Bold="False" />
        <HoverNodeStyle Font-Underline="True" ForeColor="#DD5555" />
        <SelectedNodeStyle Font-Underline="True" ForeColor="#DD5555" 
            HorizontalPadding="0px" VerticalPadding="0px" />
        <NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" 
            HorizontalPadding="0px" NodeSpacing="0px" VerticalPadding="0px" />
    <Nodes >
      <asp:TreeNode Text="Références nominatives"  NavigateUrl="" Expanded="False">
        <asp:TreeNode Text="ISO 14001 - Normes environnementales" NavigateUrl="" Expanded="False" >
 
            <asp:TreeNode Text="ISO 14001 - 4.1 - Exigences générales" 
                Value="ISO 14001 - 4.1 - Exigences générales"></asp:TreeNode>
            <asp:TreeNode Text="ISO 14001 - 4.2 - Politique environnementale" 
                Value="ISO 14001 - 4.2 - Politique environnementale"></asp:TreeNode>
            <asp:TreeNode Text="ISO 14001 - 4.3 - Planification " 
                Value="ISO 14001 - 4.3 - Planification " Expanded="False">
...
     </asp:TreeNode>
      </asp:TreeNode>
    </Nodes>
    </asp:TreeView>
     </ContentTemplate>
 
    </asp:UpdatePanel>
 
<asp:ImageButton ID="TransfertGauche" runat="server" 
          ImageUrl="/Images_Projet/Images/TransfertGauche.png" width="20" height="20" onclick="TransfertGauche_Click1" 
          /> <br /><br />
      <asp:ImageButton ID="TransfertDroit" runat="server" 
          ImageUrl="/Images_Projet/Images/TransfertDroit.png" width="20" height="20" onclick="TransfertDroit_Click1" 
 
<asp:UpdatePanel ID="UpdatePanel6" runat="server">
           <ContentTemplate>
                 <asp:TreeView ID="MesReferencesNominatives" runat="server" ImageSet="Simple" NodeIndent="10" > </asp:TreeView>
           </ContentTemplate>
           <Triggers><asp:AsyncPostBackTrigger ControlID="TransfertGauche"/></Triggers>
           <Triggers><asp:AsyncPostBackTrigger ControlID="TransfertDroit"/></Triggers>
         </asp:UpdatePanel>
J'ai commencé à remplir mes fonctions de passage :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
protected void TransfertGauche_Click1(object sender, ImageClickEventArgs e)
        {
 
            ToutesReferencesNominatives.Nodes.Add(MesReferencesNominatives.SelectedNode);
            MesReferencesNominatives.Nodes.Remove(MesReferencesNominatives.SelectedNode);
        }
 
        protected void TransfertDroit_Click1(object sender, ImageClickEventArgs e)
        {
            MesReferencesNominatives.Nodes.Add(ToutesReferencesNominatives.SelectedNode);
            ToutesReferencesNominatives.Nodes.Remove(ToutesReferencesNominatives.SelectedNode);
        }
Par contre, à partir de là, je rencontre quelques interrogations :
-Est-il possible de rendre sélectionnable les éléments du treeview comme c'est possible dans une listbox et si oui comment ?

-Comment déterminer le nombre d'éléments sélectionnés ?

Est-ce que quelqu'un saurait m'éclairer sur le sujet ?
Merci.