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

C# Discussion :

Mettre à jour automatiquement une DataGrid en cliquant sur un bouton


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut Mettre à jour automatiquement une DataGrid en cliquant sur un bouton
    Bonjour,

    D'après mon titre ça paraît simple, mais ça ne m'a pas empêché de tourner en rond pendant des lustres sans y arriver!

    J'ai un DataGrid qui s'affiche dans une fenêtre en XAML sous Visual Studio 2010, et je voudrais que, lorsque je clique sur un bouton spécifique de la même fenêtre, le contenu d'une TextBox toujours dans la même fenêtre soit ajouté à la DataGrid et s'affiche en temps réel.

    J'ai pas mal creusé les notions de delegate, évènements et consorts sur Internet et les cours et tutoriels C#, mais je n'arrive pas à structurer les notions acquises pour ce faire!

    Voici mon code:

    MainWindow.xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <DataGrid ItemsSource="{Binding myMessageList}" AutoGenerateColumns="False" Name="TextHistory"/>
    MainWindow.xaml.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void ClicSurLeBouton(object sender, RoutedEventArgs e)
    {
            myMessageList.AddMessage(MaTextBox.Text);
    }
    MessageList.cs
    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
     
        class MessageList : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged; //Pas compris à quoi ça sert...
     
            public delegate void MessageChangeDelegate(ObservableCollection<String> s);
            public event MessageChangeDelegate myMessageChangeDelegate;
     
    public void AddMessage(String s)
            {
                messages.Add(s);
                if (myDelegate != null)
                {
                    myMessageChangeDelegate(messages);
                }
            }
    Avec ce code, les changements dans la DataGrid ne s'affichent pas quand je clique sur le bouton, mais je n'ai aucune erreur. Pouvez-vous me dépanner?

    Merci d'avance.

  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
    Oula, j'ai l'impression que tu es un peu perdu...

    Déjà, ta classe MessageList, contrairement à ce que son nom indique, n'est pas une collection, donc tu ne peux pas l'utiliser comme ItemsSource.

    Ensuite, pour que le DataGrid détecte automatiquement les ajouts dans la liste, il faut que la collection implémente INotifyCollectionChanged. Il y a déjà une collection qui gère ça, c'est ObservableCollection<T>. Donc si tu veux afficher une liste de string, binde ton DataGrid sur une ObservableCollection<string> ; quand tu ajouteras un élément avec Add, il sera automatiquement ajouté dans le DataGrid.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Oula, j'ai l'impression que tu es un peu perdu...

    Déjà, ta classe MessageList, contrairement à ce que son nom indique, n'est pas une collection, donc tu ne peux pas l'utiliser comme ItemsSource.
    J'ai du mal à comprendre ce que tu essaies de me dire: comment une classe peut-elle "être une collection"? J'ai une classe objet qui a un attribut de type ObservableCollection<string>, ça oui. Cet attribut s'appelle "messages" dans "MessageList".

    Ensuite, pour que le DataGrid détecte automatiquement les ajouts dans la liste, il faut que la collection implémente INotifyCollectionChanged.
    Ma classe implémente bien ça, mais comment veux-tu qu'un attribut l'implémente? Enfin, c'est en rapport avec ma réponse ci-dessus... j'ai peut-être un peu mal compris C#, étant très habitué à Java.

  4. #4
    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 User Name Voir le message
    J'ai du mal à comprendre ce que tu essaies de me dire: comment une classe peut-elle "être une collection"?
    En implémentant les interfaces qui font que c'est une collection (au minimum IEnumerable, et éventuellement ICollection<T> ou IList<T>)

    Citation Envoyé par User Name Voir le message
    J'ai une classe objet qui a un attribut de type ObservableCollection<string>, ça oui. Cet attribut s'appelle "messages" dans "MessageList".
    Pas dans le code que tu as montré en tous cas...
    Et de toutes façons j'ai l'impression que tu a bindé directement ItemsSource sur la classe MessageList, pas sur messages

    Citation Envoyé par User Name Voir le message
    Ma classe implémente bien ça
    Non, ta classe implémente INotifyPropertyChanged, qui sert à signaler que la valeur d'une propriété à changer et non à signaler des ajouts/suppressions dans une collection

    Citation Envoyé par User Name Voir le message
    mais comment veux-tu qu'un attribut l'implémente?
    Déjà un attribut en C# c'est ça. Je pense que ce que tu appelles "attribut" c'est en fait les propriétés et les champs (aka variables de classe)

    Difficile de te guider sans en savoir plus sur ton code... Quel est ton DataContext ? Comment as-tu déclaré l'ObservableCollection dans ta classe ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Oulalaaaaaaaaa, ça se complique beaucoup trop pour moi, là!
    Bon sinon, je ne pourrais pas faire la même chose avec une ListBox ou une Grid normale au lieu d'une DataGrid? Après tout je n'ai besoin que d'une colonne.

    Le cas échéant, peux-tu me donner quelques pistes?

  6. #6
    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
    Effectivement si tu n'as qu'une seule colonne une ListBox sera suffisante. Mais le principe est le même, ça ne change rien au problème.

    Et tu n'as pas répondu aux questions que je t'ai posées

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Merci de ton aide, j'ai effectué les modifications que tu m'as conseillées, mais je me suis perdu en chemin, donc je vais repartir de zéro, étape par étape, parce que je suis vraiment vraiment perdu, si tu veux bien me répondre... :'(

    Bon, supposons que je n'aie plus la classe MessageList. J'ai remplacé DataGrid par une Grid finalement, et dans la fonction de l'evenement du clic du bouton, j'ai mis ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    maGrid.Children.Add(maTextBox.Text);
    Résultat: Erreur de compilation suivante:
    Error 1 The best overloaded method match for 'System.Windows.Controls.UIElementCollection.Add(System.Windows.UIElement)' has some invalid arguments
    Pourquoi? :S

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    WOOOOOOOOOOOOOOOOT!!! Ca marche! Enfin!
    Voilà ce que j'ai fait:

    MainWindow.xaml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <DataGrid ItemsSource="{Binding messages}" AutoGenerateColumns="False" >
                            <DataGrid.Columns>
                                <DataGridTemplateColumn Header="Text history" MinWidth="100" Width="*"  IsReadOnly="True">
                                    <DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <TextBox Text="{Binding Message}"/>
                                        </DataTemplate>
                                    </DataGridTemplateColumn.CellTemplate>
                                </DataGridTemplateColumn>
                            </DataGrid.Columns>
                        </DataGrid>
    MainWindow.xaml.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myMessageList.AddMessage(new monMessage(InputTextBox.Text));
    MessageList.cs
    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
            public event PropertyChangedEventHandler PropertyChanged;
     
            public delegate void MessageChangeDelegate(ObservableCollection<monMessage> s);
            public ObservableCollection<monMessage> messages { get; set; }
     
            public event MessageChangeDelegate myMessageChangeDelegate;
     
    [...]
            public void AddMessage(monMessage s)
            {
                messages.Add(s);
                if (myMessageChangeDelegate != null) //Site du 0
                {
                    myMessageChangeDelegate(messages);
                }
            }
    monMessage.cs
    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
     
        class monMessage : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            private string message;
     
            public monMessage(string s)
            {
                message = s;
            }
     
            public string Message
            {
                get { return message; }
                set
                {
                    message = value;
                    if (PropertyChanged != null) OnNotifyPropertyChanged("Message");
                }
            }
     
            protected virtual void OnNotifyPropertyChanged(string propName)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
     
        }
    }
    Les seuls changements dont je me rappelle sont que j'ai ajouté le DataContext à un new MessageList et remplacé MessageList par messages dans la balise du DataGrid. Mais je suis sûr que j'ai des morceaux de code en trop dans mon projet par rapport à cette fonctionnalité parce que je n'ai pas trop compris le fonctionnement derrière. En fait, mon enseignant nous a donné un projet très complexe en guise d'exemple, qui rapatrie des données d'Internet. Mais il l'est tellement qu'il me désoriente plus qu'il ne m'est utile...

    Edit: Ah oui! J'ai du aussi rajouter la classe monMessage.cs pour me conformer au projet exemple, mais je ne sais pas si c'est possible de faire sans...

  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
    ça marche, mais c'est environ 1000 fois plus compliqué que nécessaire

    Voilà ce que j'aurais fait :

    - pas de classe MessageList, mais à la place une ObservableCollection<string>, déclarée dans le code-behind (fichier .xaml.cs)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public ObservableCollection<Message> Messages { get; set; }
    - Dans le constructeur de la fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Messages = new ObservableCollection<string>();
    DataContext = this;
    - Dans le code du bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Messages.Add(InputTextBox.Text);

    - et côté XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ListBox ItemsSource="{Binding Messages}" />

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Merci pour ta réponse, mais de mon point de vue il est important de créer un objet monMessage, dans la mesure où par la suite il se peut qu'il ne contienne pas qu'un string.

    En fait c'est un objet que je vais probablement transmettre en réseau à un Karotz, donc il doit inclure d'autres "propriétés", comme tu dis.

    Merci pour ton aide, mais si ça ne te dérange pas, j'aurais une autre question:
    Je voudrais n'ajouter le texte de la TextBox dans la ListBox que dans le cas où la propriété "message" de monMessage (donc le string) n'est pas déjà présente dans la ListBox. Autrement dit, pour comparer deux monMessage, je me limite à la comparaison de leur propriété "message".

    J'ai donc fait une surcharge d'opérateurs "==" et "!=" dans la classe monMessage.cs, codé une classe "Contains" pour MessageList qui utilise le "Contains" générique sur sa collection, mais même quand l'élément est déjà présent dans la collection, il considère que ce n'est pas le cas:

    MessageList.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            public bool Contains(monMessage s)
            {
                if (messages.Contains(s))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    monMessage.cs
    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
     
            public static bool operator ==(monMessage m1, monMessage m2)
            {
                if (m1.message.Equals(m2.message))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
     
            public static bool operator !=(monMessage m1, monMessage m2)
            {
                if (m1.message.Equals(m2.message))
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
    MainWindow.xaml.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                monMessage currentMessage = new monMessage(InputTextBox.Text);
                if (!myMessageList.Contains(currentMessage))
                {
                    myMessageList.AddMessage(currentMessage);
                }
    [/code]
    J'ai raté quelque chose?

  11. #11
    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 User Name Voir le message
    Merci pour ta réponse, mais de mon point de vue il est important de créer un objet monMessage, dans la mesure où par la suite il se peut qu'il ne contienne pas qu'un string.
    Dans ce cas c'est le même principe, mais en utilisant une ObservableCollection<monMessage>. Toujours pas besoin d'une classe MessageList


    Citation Envoyé par User Name Voir le message
    J'ai donc fait une surcharge d'opérateurs "==" et "!=" dans la classe monMessage.cs
    Ce n'est pas ça qu'il faut faire, mais plutôt redéfinir la méthode Equals (et aussi GetHashcode, car quand on redéfinit l'une il faut aussi redéfinir l'autre)

    Mais de toutes façons ce n'est pas indispensable, tu peux te débrouiller autrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            public bool Contains(string messageText)
            {
                return messages.Any(m => m.message == messageText);
            }
    (note que je prends un string en paramètre, et non un monMessage ; comme ça, pas besoin de créer une instance de monMessage que tu ne vas peut-être pas utiliser)

    Citation Envoyé par User Name Voir le message
    codé une classe "Contains" pour MessageList qui utilise le "Contains" générique sur sa collection, mais même quand l'élément est déjà présent dans la collection, il considère que ce n'est pas le cas:

    [...]

    J'ai raté quelque chose?
    En fait ton opérateur == n'est pas utilisé ; c'est un membre statique, qui ne participe donc pas au polymorphisme. C'est pour ça que je disais qu'il fallait plutôt redéfinir Equals.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Encore merci pour ta réponse, mais encore une fois j'ai omis de te dire que c'était provisoire! Maintenant je veux comparer deux monMessage en respectant l'égalité entre plusieurs attributs. Je dois donc maintenant bien surcharger "==", non? Et prendre un monMessage en paramètre dans ton Contains?

  13. #13
    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 User Name Voir le message
    Je dois donc maintenant bien surcharger "==", non?
    Non, il faut redéfinir Equals. L'opérateur == s'utilise uniquement de façon statique, c'est-à-dire quand tu fais msg1 == msg2. La méthode Contains ne l'utilisera pas, elle utilisera Equals.

    Citation Envoyé par User Name Voir le message
    Et prendre un monMessage en paramètre dans ton Contains?
    Si tu veux comparer d'autres propriétés que le texte, oui.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Merci pour ta réponse. Ok pour ça.

    J'aurais une dernière question, si ça ne te dérange pas:

    J'ai un DataGrid dans une fenêtre WPF qui est bindée à une collection d'objets, l'objet en question ayant 3 propriétés (une par colonne dans le DataGrid). L'une des propriétés de l'objet étant une couleur (sous la forme d'un string contenant son code héxadécimal), je souhaiterais par le moyen le plus simple possible que, en fonction de la valeur de cette propriété, la cellule du DataGrid prenne la couleur correspondante. J'ai essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <TextBox Foreground="{Binding LedColor, StringFormat='#\{0\}'}"/>
    (code trouvé sur Internet). Mais même en remplaçant Foreground par Background, rien à faire, elle reste blanche! Le binding fonctionne bien, puisqu'en mettant Text, j'ai bien le code de la couleur correspondante! J'ai regardé le projet que mon enseignant nous a filé, et il est passé par un délire de ressources, styles, convertisseurs, triggers...etc. qu'il ne me serait pas de trop d'éviter d'utiliser!

    Est-ce possible?
    Merci d'avance!

  15. #15
    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
    StringFormat ne sert que quand la propriété cible est de type String, sinon ce n'est pas utilisé. Le plus simple, ce serait que ta propriété renvoie directement le code couleur avec le "#".

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    LedColor est bien de type string...

  17. #17
    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 User Name Voir le message
    LedColor est bien de type string...
    LedColor c'est la propriété source, pas cible...
    Foreground est de type Brush

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Aie... alors comment dois-je faire?

  19. #19
    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 User Name Voir le message
    Aie... alors comment dois-je faire?
    Bah je te l'ai dit : modifie ta propriété pour qu'elle renvoie le code couleur avec le "#". Sinon tu peux aussi utiliser un convertisseur, mais c'est plus galère

Discussions similaires

  1. Mise a jour d'une div en cliquant sur un lien RoR
    Par Baltius dans le forum Ruby
    Réponses: 0
    Dernier message: 22/04/2009, 01h14
  2. Est-il possible de mettre en pause une vidéo en cliquant sur un hyperlien
    Par kouedic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 24/04/2008, 17h20
  3. mettre à jour automatiquement une SGBD
    Par M@XflY dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 06/12/2006, 16h36
  4. placer un texte dans une textarea en cliquant sur un bouton
    Par BernardT dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/11/2005, 17h17
  5. Réponses: 4
    Dernier message: 14/11/2005, 15h58

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