Bonsoir,

J'ai un Ajax Accordion contenant dans chaque Pane une DataList.

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
 
<ajaxToolkit:Accordion ID="Accordion1" runat="server"
                onitemdatabound="Accordion1_ItemDataBound" SuppressHeaderPostbacks="True" Width="500"
                   HeaderCssClass="accordionHeader" 
                    HeaderSelectedCssClass="accordionHeaderSelected" 
                    ContentCssClass="accordionCriteres" TransitionDuration="200" 
                    FadeTransitions="False">            
                <HeaderTemplate>
                    <asp:Label ID="LabelZone" runat="server" Text='<%# Eval("LIBELLE_ZONE") %>'></asp:Label>
                    <asp:HiddenField runat="server" ID="HidTypeBienZone" value='<%# Eval("TYPES_BIEN") %>'></asp:HiddenField> 
                </HeaderTemplate>
                <ContentTemplate>
                    <asp:HiddenField runat="server" ID="hidZone" value='<%# Eval("ID_ZONE") %>'></asp:HiddenField>
 
                    <!--
                    <asp:DataList ID="DataList1" runat="server" Width="200" Visible="true">
                        <ItemTemplate>
                            <asp:Label runat="server" ID="labelCritere" Text='<%# Eval("LIBELLE_CRITERE") %>' value='<%# Eval("LIBELLE_CRITERE") %>' Visible="true"></asp:Label>
                        </ItemTemplate>                    
                    </asp:DataList>
                    -->
 
                    <asp:DataList ID="DataList2" runat="server" DataKeyField="ID_CRITERE"
                        onitemdatabound="DataList1_ItemDataBound">
                        <ItemTemplate>
                            <asp:Label ID="ID_CRITERELabel" runat="server" 
                                Text='<%# Eval("ID_CRITERE") %>' Visible="false" />
                            <asp:HiddenField runat="server" ID="hidTypeControle"></asp:HiddenField>
                            <asp:HiddenField runat="server" ID="HidTypeBienCritere" value='<%# Eval("TYPES_BIEN") %>'></asp:HiddenField>                            
                            <asp:Label ID="LabelTest" runat="server" Text="Label"></asp:Label>
                            <asp:Label ID="LabelTest2" runat="server" Text="Label"></asp:Label>                             
                            <asp:CheckBox ID="CheckBoxCritere" runat="server"  Visible="false" Text='<%# Eval("LIBELLE_CRITERE") %>'/>
                            <asp:Label ID="LabelCritere" runat="server"  Visible="false" Text='<%# Eval("LIBELLE_CRITERE") %>'/>
                            <asp:TextBox ID="TextBoxCritere" runat="server" Visible="false"></asp:TextBox>
                            <img alt="" title='<%# Eval("DESCRIPTION_CRITERE") %>' src="App_Themes/Defaut/images/info-critere.gif" />
                            <br />
                        </ItemTemplate>
                    </asp:DataList>                
                </ContentTemplate> 
             </ajaxToolkit:Accordion>
Tout cela se remplit parfaitement.

Parfois, j'ai besoin de masquer certains éléments. J'ai donc une méthode censée le faire :

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
 
public void AfficherCriteres()
    {
        string type = ";" + TypeBien.ToString() + ";";
 
 
        for (int i = 0; i < Accordion1.Panes.Count; i++)
        {
            string test = ((HiddenField)Accordion1.Panes[i].HeaderContainer.FindControl("HidTypeBienZone")).ClientID;
            if (((HiddenField)Accordion1.Panes[i].HeaderContainer.FindControl("HidTypeBienZone")).Value.Contains(type))
                Accordion1.Panes[i].Visible = true;
            else
                Accordion1.Panes[i].Visible = false;
 
 
            DataList DataList = (DataList) Accordion1.Panes[i].FindControl("DataList2");
 
 
            for (int j = 0; j < DataList.DataKeys.Count; j++)
            {
                string test2 = ((HiddenField)DataList.Items[j].FindControl("HidTypeBienCritere")).Value;
                string test3 = ((Label)DataList.Items[j].FindControl("LabelCritere")).Text;
                if (((HiddenField)DataList.Items[j].FindControl("HidTypeBienCritere")).Value.Contains(type))
                    DataList.Items[j].Visible = true;
                else
                    DataList.Items[j].Visible = false;
 
 
 
            }
 
        }       
 
    }
Lorsque je l'appelle, le nombre de Panes se réajuste bien.
Si j'ai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Accordion1.Panes[i].Visible = false;
l'Accordion se raffraichit avec la Pane en moins.

En revanche,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
DataList.Items[j].Visible = false;
ne produit rien.
J'ai vérifié en debug, je passe bien dans cette ligne de code mais à l'affichage, aucun changement.

Sauriez-vous me dire comment "forcer" le rafraichissement de la DataList ?
Merci,

T.