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 :

Manipulation d'id dans un datalist


Sujet :

ASP.NET

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Points : 230
    Points
    230
    Par défaut Manipulation d'id dans un datalist
    Bonjour,

    Mon probleme est simple (a expliquer tout du moins). J'ai un datalist avec un champ cache. A certains endroits je veux que ce champ prenne un id bien precis. Ce qui me permettrait d'utiliser une ancre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    asp:DataList CssClass="glossary_list" ID="dtlGlossary" runat="server" RepeatColumns="2"
                    RepeatDirection="Horizontal" OnItemDataBound="createAncre">
                    <ItemTemplate>
                        <table class="glossary_table">
                            <asp:HiddenField id="hfield" runat="server" />
                            <tr>
                                blablabla
                            </tr>
                        </table>
                    </ItemTemplate>
                </asp:DataList><br />

    Or ca ne marche pas, quand je regarde la source, ca m'affiche ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id="ctl00_ContentPlaceHolder1_dtlGlossary_ctl09_b"


    Y a-t-il un moyen de reduire mon id a ca tout simplement :

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour un contrôle serveur, l'id est toujours généré automatiquement
    Mais tu peux mettre un simple contrôle HTML à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
        <input type="hidden" id="ce_que_tu_veux"/>
    ...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Points : 230
    Points
    230
    Par défaut
    Ah oui en effet je viens de comprendre un truc.

    Mais j'ai oublie de dire un truc, c'est que j'ai besoin de modifier l'id dans mon code behind. On peut recuperer un input en behind ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Points : 230
    Points
    230
    Par défaut
    Oui evidemment question bete...

    En revanche ta solution ne marche pas.

    Je viens de penser que j'ai pas mis tout mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected void createAncre(Object sender, DataListItemEventArgs e)
        {
            HtmlInputText hfield = (HtmlInputText)e.Item.FindControl("hfield");
            Label lbl = (Label)e.Item.FindControl("lblTitle");
            String newLetter = lbl.Text.Substring(0, 1).ToLower();
            if (newLetter!=HiddenField.Value)
            {
                hfield.ID = newLetter;
                HiddenField.Value = newLetter;
            }
        }


    Sinon il me faudrait un moyen de faire un :
    <a href="#ctl00_ContentPlaceHolder1_dtlGlossary_ctl09_b">A</a>

    Un truc du style "*" a la place du ctl09 que je ne connais pas forcement.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je sais pas si ça répond à ta question, mais tu peux récupérer l'ID client de n'importe quel contrôle serveur avec sa propriété ClientID

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Points : 230
    Points
    230
    Par défaut
    Hum je ne pense pas.

    J'explique un peu plus en detail :
    Ma datalist est assez longue et je veux pouvoir la remplir en y inserant des ancres. Ma liste est deja triee par ma requete SQL. J'ai donc juste a detecter la premiere lettre du titre de mon DataListItem pour savoir a qule endroit je dois inserer une ancre.

    J'ai donc une fonction behind qui verifie ca et qui change l'id d'un champ cache. Ce champ cache peut ensuite servir d'ancre.

    Mais il veut pas mettre l'id que je veux

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je sais pas exactement quelle est la meilleure façon de faire, mais ça me semble bizarre d'utiliser des champs hidden pour ça... pourquoi pas des ancres HTML (<a>) qui servent à ça ?

    Tu pourrais incrémenter l'id à chaque élément avec un truc comme ça :

    Déclares un compteur dans ta classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected int compteur = 0;
    Et utilise le dans ton template pour générer l'id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a id="ancre<%= compteur++ %>"/>
    Ensuite, tu peux mettre des liens genre href="#ancre10" pour accéder à l'item 10

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Points : 230
    Points
    230
    Par défaut
    Hum je suis loin d'etre un expert mais ca revient strictement au meme je crois.

    Et ca ne change pas grand chose a mon probleme puisque je ne veux pas incrementer, je veux juste savoir quand le titre de mes DataListItem change de lettre pour pouvoir y inserer une ancre.

    Ceci etant dit il est possible que je commence a deraille completement

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Larger Voir le message
    Hum je suis loin d'etre un expert mais ca revient strictement au meme je crois.
    Possible en effet... mais bon, c'est juste que ça me semble plus logique d'utiliser un anchor (vu que c'est fait pour), surtout que si tu utilises des champs hidden, leur valeur va être transmise au serveur lors du postback, ce qui ajoute inutilement du volume à transférer.

    Citation Envoyé par Larger Voir le message
    Et ca ne change pas grand chose a mon probleme puisque je ne veux pas incrementer, je veux juste savoir quand le titre de mes DataListItem change de lettre pour pouvoir y inserer une ancre.
    Ben tu peux utiliser le même principe... tu peux faire un truc dans ce style :

    Code-behind :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private char letter = '\0';
     
    protected string GetAnchor(object title)
    {
        if (title == null) return "";
        char firstLetter = title.ToString().ToUpper()[0];
        if (firstLetter != letter)
        {
            letter = firstLetter;
            return string.Format("<a id=\"lettre{0}\"/>", lettre);
        }
        else return "";
    }
    code aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%# GetAnchor(Eval("Titre")) %>

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Points : 230
    Points
    230
    Par défaut
    Magnifique ! C'est exactement ca !

    Je viens de comprendre un petit paquet de truc grace a toi, merci beaucoup.



    PS : en plus tu as corrige mon franglais, je viens de voir une belle faute

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#]Comment formater les retours chariots dans un datalist
    Par nashouille dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/07/2006, 14h05
  2. Réponses: 4
    Dernier message: 01/05/2006, 23h02
  3. Réponses: 7
    Dernier message: 15/02/2006, 17h13
  4. Réponses: 2
    Dernier message: 17/11/2005, 09h59
  5. Réponses: 3
    Dernier message: 13/10/2004, 10h43

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