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

Silverlight Discussion :

Ajouter des données avec .Net RIA Services


Sujet :

Silverlight

  1. #1
    Invité
    Invité(e)
    Par défaut Ajouter des données avec .Net RIA Services
    Salut,

    Je rencontre un soucis quand je souhaite ajouter des données en utilisant .Net RIA Services.

    En fait, quand j'ajoute une donnée (que ce soit via un formulaire ou directement dans le code-behind, celle ci n'apparait pas dans la grille.

    Pour afficher ma grille, j'utilise un Domain Data Source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <riaControls:DomainDataSource x:Name="source"
                                                  QueryName="GetLogementsQuery"
                                                  AutoLoad="True"
                                                  LoadSize="20"
                                                  >
                        <riaControls:DomainDataSource.DomainContext>
                            <domain:LogementsFichiersDomainContext />
                        </riaControls:DomainDataSource.DomainContext>
                    </riaControls:DomainDataSource>
    Ensuite, je déclare une DataGrid et un DataPager en spécifiant dans ItemsSource ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemsSource="{Binding Data, ElementName=source}"
    Les données apparaissent bien (j'ai mis quelques enregistrements par défaut dans ma classe).

    Si j'essaye d'ajouter un enregistrement dans le code behind comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var context = source.DomainContext as LogementsFichiersDomainContext;
    context.LogementsFichiers.Add(new LogementsFichiers() { ........ });
    source.SubmitChanges();
    Rien n'apparait de nouveau dans la DataGrid.

    Pareil si je fais avec une DataForm dans une ChildWindow :

    Appel de la ChildWindow :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void addNewLogementsFichiers_Click(object sender, RoutedEventArgs e)
            {
                LogementsFichiersRegistrationWindow addLgm = new LogementsFichiersRegistrationWindow();
                addLgm.Closed += new EventHandler(addLgm_Closed);
                addLgm.Show();
            }
    Dans la ChildWindow, je met tout ce qu'il faut :
    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
    public partial class LogementsFichiersRegistrationWindow : ChildWindow
        {
            public LogementsFichiersRegistrationWindow()
            {
                InitializeComponent();
                NewLogementsFichiers = new LogementsFichiers();
                AddLogementsFichierDataForm.CurrentItem = NewLogementsFichiers;
                AddLogementsFichierDataForm.BeginEdit();
            }
     
            private void OKButton_Click(object sender, RoutedEventArgs e)
            {
                AddLogementsFichierDataForm.CommitEdit();
                this.DialogResult = true;
            }
     
            private void CancelButton_Click(object sender, RoutedEventArgs e)
            {
                AddLogementsFichierDataForm.CancelEdit();
                this.DialogResult = false;
            }
     
            public LogementsFichiers NewLogementsFichiers { get; set; }
     
        }
    Et enfin, sur l'évenement Closed de la ChildWindow :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void addLgm_Closed(object sender, EventArgs e)
            {
                LogementsFichiersRegistrationWindow lgm = (LogementsFichiersRegistrationWindow)sender;
                if (lgm.NewLogementsFichiers != null)
                {
                    LogementsFichiersDomainContext _LogementsFichiersDomainContext = (LogementsFichiersDomainContext)(source.DomainContext);
                    _LogementsFichiersDomainContext.LogementsFichiers.Add(lgm.NewLogementsFichiers);
                    source.SubmitChanges();
                }
            }
    Mais là encore, rien n'apparait.


    Pour tester, j'ai ajouté ceci dans le constructeur de ma feuille principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LogementsFichiersDomainContext _LogementsFichiersDomainContext = (LogementsFichiersDomainContext)(source.DomainContext);
    _LogementsFichiersDomainContext.Load(_LogementsFichiersDomainContext.GetLogementsQuery());
    GrilleLogements.ItemsSource = _LogementsFichiersDomainContext.LogementsFichiers;
    En gros, j'ai remis le code qui est normalement executé en XAML avec le DomainDataSource.

    Et maintenant, si j'ajoute une donnée, elle apparait bien à la suite des autres.

    Mais bon, il y a deux problèmes :
    - Déjà, je trouve ça dommage de devoir remettre ces lignes de code dans le constructeur de la page alors que j'ai un Domain Data Source dans mon code XAML.
    - Ensuite, les données qui apparaissent dans la grille ne respectent pas du tout mon système de pagination. En gros, tout apparait dans une seule et unique page. C'est un peu dommage.

    En résumé, je souhaite pouvoir ajouter des données et que celles ci apparaissent dans ma DataGrid sans avoir à bidouiller dans le code behind et que ça conserve mes règles de pagination (15 éléments par page par exemple).

    Ce problème vous évoque-t'il quelque chose ?

    Ps : Mes données ne sont pas issues d'une BDD pour info. C'est juste une classe avec une liste qui j'ai initialisé avec quelques données.

    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Personne ?

    J'ai fais de nombreux autres essais. En fait, quand je travaille avec une base de données, ça fonctionne. J'ajoute un élément, je clique sur mon bouton Submit, ma liste se rafraichit et le nouvel élément apparait (il apparait seulement après le clic sur Submit).

    Quand je travaille avec des données en local, rien n'apparait. Pourtant, le nouvel élément est bien présent dans la liste car si je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var cnt = source.DomainContext as LogementsFichiersDomainContext;
    MessageBox.Show(cnt.LogementsFichiers.Count().ToString());
    source étant le DomainDataSource déclaré dans le code XAML. Le count indique bien qu'il y a un nouvel élément.

    J'ai essayé de rajouter des :

    dans le code du bouton Submit, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void Submit_Click(object sender, RoutedEventArgs e)
            {
                DataForm1.CommitEdit();
                source.SubmitChanges();
                source.Load();
            }
    Mais ça ne change rien. La liste semble bien se rafraichir pourtant (je vois un court chargement et ça retourne automatiquement à la page 1 de mon DataPager).

    Je sais plus trop quoi faire

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Hathortos Voir le message
    - Déjà, je trouve ça dommage de devoir remettre ces lignes de code dans le constructeur de la page alors que j'ai un Domain Data Source dans mon code XAML.
    Pkoi ne pas simplement binder, en XAML, la propriété ItemsSource de ta grille à la propriété Data de ton DomainDataSource ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est ce que je fais déjà, nan :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemsSource="{Binding Data, ElementName=source}"
    source est le nom du DomainDataSource pour info.

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Dans ce cas, tu n'as rien d'autre à faire normalement...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Personne aurait un exemple d'une application qui fait ce genre de chose et qui fonctionne ? Ou un tuto qui explique bien ?

    J'ai même dl l'application d'exemple du tutorial de Brad Abrams (clic droit enregistrer sous) et ça marche pas non plus. Les ajouts n'apparaissent pas dans la liste.

    A cause de ce soucis, je suis complétement bloqué

  7. #7
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Mais le problème vient de ta liste. Peut-être qu'il ne sait pas comment ajouter un objet dans ta liste justement. Quand tu es lié à un BDD il sait qu'il doit faire un INSERT mais quand tu es lié à une liste il ne doit pas savoir qu'il faut faire un Add.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  8. #8
    Invité
    Invité(e)
    Par défaut
    Pourtant, j'ai implémenté mon Domain Service comme il faut (enfin je crois ) :

    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
     
     
     
    [EnableClientAccess()]
    public class LogementsFichiersomainService : DomainService
    {
        LogementsFichierList Context = new LogementsFichierList();
     
        public IQueryable<LogementsFichiers> GetLogements()
        {
            return Context.GetLesLogements().AsQueryable();
        }
     
        public IQueryable<LogementsFichiers> GetLogement(int logementID)
        {
            return Context.GetLesLogements().ToList()
                .Where(lgm => lgm.LogementID == logementID).AsQueryable(); 
        }
     
        public void InsertLogement(LogementsFichiers monLogement)
        {
            Context.Add(monLogement);
        }
     
        public override void Submit(ChangeSet changeSet)
        {
        base.Submit(changeSet); 
        }
    }
    En plus, quand j'ajoute un élément, je vois bien que la liste a augmenté de taille.

    Je fais un count de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var cnt = source.DomainContext as LogementsFichiersDomainContext;
    MessageBox.Show(cnt.LogementsFichiers.Count().ToString());
    Le count augmente bien. Ça ajoute donc bien le logement quelque part.

    J'ai plus l'impression que c'est le réaffichage de la liste qui déconne.

    D'ailleurs, comme je l'ai signalé dans mon premier poste, si j'ajoute ça dans le code behind, les nouveaux éléments apparaissent bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LogementsFichiersDomainContext _LogementsFichiersDomainContext = (LogementsFichiersDomainContext)(source.DomainContext);
    _LogementsFichiersDomainContext.Load(_LogementsFichiersDomainContext.GetLogementsQuery());
    GrilleLogements.ItemsSource = _LogementsFichiersDomainContext.LogementsFichiers;
    Autre point important, les modifications fonctionnent. Si je modifie un élément, que je valide, la modif apparait bien. Et si je rafraichi la liste (en faisant un source.Load() ), la modif apparait toujours.

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    J'ai pas encore touché au RIA Services mais 2 questions :
    Et avec Mode=OneWay dans ton binding ?
    Il ne faut pas que ta classe LogementsFichierList hérite de ObservableCollection ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  10. #10
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    LogementsFichierList, c'est quoi ? Un EDMX ? Un DBML ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    LogementsFichierList, c'est quoi ? Un EDMX ? Un DBML ?
    Ni l'un, ni l'autre :p

    C'est juste une classe ou je déclare une liste d'objets "LogementsFichier" et ou j'initialise quelques instances.

    Ca donne ça :

    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
    44
    45
    46
    47
    48
    49
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
     
    namespace IntegrationLogementsRIA.Web
    {
        public class LogementsFichiersList
        {
            List<LogementsFichiers> listLgm = new List<LogementsFichiers>() 
            { 
                new LogementsFichiers() { Cod_Lgm="451", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="452", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="453", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="454", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="455", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="456", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="457", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="458", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="459", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="460", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="461", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="462", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="463", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="464", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="465", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="466", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="467", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
                new LogementsFichiers() { Cod_Lgm="468", Compl="COMPL", Des_Site="SITE", Des_Reg="REGION", DROIT="AUCUN", Num="34", Ref_Cnt="TEST", Ville="LILLE", CP="59000", Appt="IND", Rue="RUE DES HIRONDELLES"}, 
            };
     
            public IEnumerable<LogementsFichiers> GetLogements()
            {
                return listLgm.ToArray();
            }
     
            public void Add(LogementsFichiers lgm)
            {
                listLgm.Add(lgm);
            }
     
            public void Update(LogementsFichiers current, LogementsFichiers orginal)
            {
                if (listLgm.Contains(orginal)) listLgm.Remove(orginal);
                Add(current);
            }
        }
    }
    Et la classe LogementsFichier :

    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
    44
    45
    46
    47
    48
    49
    50
    51
     
    namespace IntegrationLogementsRIA.Web
    {
        public class LogementsFichiers
        {  
            [Key]
            [Display(Name = "Code Lgm")]
            [Required(ErrorMessage = "Le champ Code Logmement est obligatoire")]
            public string Cod_Lgm { get; set; }
     
            [Display(Name = "Contrat")]
            [Required(ErrorMessage = "Le champ Contrat est obligatoire")]
            public string Ref_Cnt { get; set; }
     
            [Display(Name = "Site")]
            [Required(ErrorMessage = "Le champ Site est obligatoire")]
            public string Des_Site { get; set; }
     
            [Display(Name = "Region")]
            [Required(ErrorMessage = "Le champ Région est obligatoire")]
            public string Des_Reg { get; set; }
     
            [Display(Name = "Num")]
            public string Num { get; set; }
     
            [Display(Name = "Rue")]
            [Required(ErrorMessage = "Le champ Rue est obligatoire")]
            public string Rue { get; set; }
     
            [Display(Name = "Complément")]
            public string Compl { get; set; }
     
            [Display(Name = "Code Postal")]
            [Required(ErrorMessage = "Le champ Code Postal est obligatoire")]
            public string CP { get; set; }
     
            [Display(Name = "Ville")]
            [RegularExpression("[A-Z][A-Za-z]*", ErrorMessage = "Le champ Ville ne peut contenir que des caractères alphabétiques")]
            [Required(ErrorMessage = "Le champ Ville est obligatoire")]
            public string Ville { get; set; }
     
            [Display(Name = "Appt")]
            [Required(ErrorMessage = "Le champ Appt est obligatoire")]
            public string Appt { get; set; }
     
            [Display(Name = "DROIT")]
            [RegularExpression("[A-Z][A-Za-z]*", ErrorMessage = "Le champ DROIT ne peut contenir que des caractères alphabétiques")]
            [Required(ErrorMessage = "Le champ DROIT est obligatoire")]
            public string DROIT { get; set; }
        }
    }
    En fait, j'ai repris l'exemple de Brad Abrams :

    Business Apps Example for Silverlight 3 RTM and .NET RIA Services July Update: Part 9: POCO and Authentication Provider

    Mais bon, quand je télécharge son application exemple, y'a le même soucis on dirait, rien ne s'ajoute dans la liste.

Discussions similaires

  1. [AC-2007] Ajouter des données avec TransferText et pas remplacer
    Par oplaut dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/02/2013, 12h21
  2. Problème d'ajout des données avec ado.net
    Par ahmedbj dans le forum ADO.NET
    Réponses: 10
    Dernier message: 14/03/2012, 13h36
  3. Réponses: 10
    Dernier message: 26/10/2009, 15h02
  4. Ajout des donnés avec un DataAdapter
    Par Marc_27 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/03/2009, 21h57
  5. Ajout des données avec une condition
    Par jean sami dans le forum SQL
    Réponses: 2
    Dernier message: 15/09/2008, 06h21

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