IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Rafraichir DataList lorsqu'une DataList.Item passe à Visible=False


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Points : 92
    Points
    92
    Par défaut Rafraichir DataList lorsqu'une DataList.Item passe à Visible=False
    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.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Points : 92
    Points
    92
    Par défaut
    Pour compléter :

    Quand je décide de masquer (ou enable=false) un contrôle dans la DataList.Item[j], cela fonctionne.

    Impossible en revanche de masquer toute la DataList.Item[j]...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Points : 92
    Points
    92
    Par défaut
    Bon, j'ai partiellement résolu mon problème.
    Je ne sais pas si c'est très beau mais je passe pas une classe CSS (display:none ou display:block)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (((HiddenField)DataList.Items[j].FindControl("HidTypeBienCritere")).Value.Contains(type))
                    {
                        DataList.Items[j].Visible = true;
                        DataList.Items[j].CssClass = "AfficherDataListItem";                    
                    }
                    else
                    {
                        DataList.Items[j].Visible = false;
                        DataList.Items[j].CssClass = "MasquerDataListItem";
                    }
    Un dernier problème :
    A la fin, je clique sur un bouton qui me lance cette procédure :
    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
     
    public Dictionary<int, int> CriteresChoisis()
        {      
     
            Dictionary<int, int> choix = new Dictionary<int, int>();
            string type_controle = "1"; 
     
            for (int i = 0; i < Accordion1.Panes.Count; i++)
            {
                DataList DataList = (DataList) Accordion1.Panes[i].FindControl("DataList2");            
     
                for (int j = 0; j < DataList.DataKeys.Count; j++)
                {
                    type_controle = ((HiddenField)(DataList.Items[j].FindControl("hidTypeControle"))).Value;                           
     
                    switch (type_controle)
                    {
                        case "1":
                            if (((CheckBox)(DataList.Items[j].FindControl("CheckBoxCritere"))).Checked)
                                choix[Int32.Parse(DataList.DataKeys[j].ToString())] = 1;
                            break;
                        case "2":
                            if (((TextBox)(DataList.Items[j].FindControl("TextBoxCritere"))).Text != "")
                                choix[Int32.Parse(DataList.DataKeys[j].ToString())] = Int32.Parse(((TextBox)(DataList.Items[j].FindControl("TextBoxCritere"))).Text);
                            break;
                        case "3":
                            break;
                    }
                }
            }
     
            Accordion1.SelectedIndex = 0;        
     
            return choix;
        }
    Et là, les items de DataList qui avaient été masqués réapparaissent.
    Le plus étrange c'est qu'en regardant le code source, ces items sont toujours indiqués avec la bonne CssClass (MasquerDataListItem)

    Sauriez-vous m'expliquer pourquoi ? Merci,
    T.

Discussions similaires

  1. Remplir une DataList via une procedure stockée sql
    Par noskill_62 dans le forum C#
    Réponses: 4
    Dernier message: 29/01/2008, 17h48
  2. Comment accéder à un item d'une DataList ?
    Par Ezekhiel dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/08/2006, 13h29
  3. Réponses: 4
    Dernier message: 01/05/2006, 23h02
  4. Probléme lorsqu'une fenétre passe par dessus l'autre...
    Par hostile dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 03/01/2006, 19h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo